phpstudy mysql创建表_MySQL_Mysql入门基础 数据库创建篇,1.创建数据表---基础(高手跳 - phpStudy...

Mysql入门基础 数据库创建篇

1.创建数据表---基础(高手跳过)

正统方法:create [TEMPORARY] table 表名 [if not exists]

(创建的列项定义)

[表的选项]

[分区的选项];#正统的创建方式,具体的参数,请参考mysql手册,在这里不做详细的解释,只说一些比较特别的。

例:

复制代码 代码如下:

create table user(id int unsigned not null auto_increment,

username char(15),

sex enum('M','F') default 'M',

userid varchar(20),

PRIMARY KEY(id,userid),

INDEX idx_user(userid),

)engine='innodb' charset=utf8;

复制数据库结构:

复制代码 代码如下:

create [temporary] table 表名 [if not exists] like 已存在的表名;//模仿已存在的表创建一个结构完全相同的表

mysql>create table vip_user like user;

mysql>create table vip_user select * from user where 0;//上例还可以这样做,仅复制结构

复制并copy数据库

复制代码 代码如下:

create [temporary] table 新表名 select * from 旧表名;#用户可以人为的指定后续select组合成需要的语句。

create table dst_tbl(

id int not null auto_increment,

primary key(id)

) select a,b,c from src_tbl;

以此来创建各种各样的符合用户要求的数据库,这里只是做一个抛砖引玉。

2.查看修改的数据表结构

复制代码 代码如下:

mysql> desc 数据表名;#查看数据表的结构

mysql> show create table 数据表名\G #查看数据表的构成语句,\G和;的意义相同,只不过\G是纵向显示,这样看的更清楚。

mysql> show table status like '数据表名'\G #查看数据表的状态

mysql> show columns from 数据表名;#查看数据表的结构,同desc一样,不过使用这条语句后面加like '字段'可以只显示指定字段

3. 更改变据库的结构

我们首先创建一个表

mysql> create table vip(id int null,username varchar(30));

修改表结构中的数据类型

复制代码 代码如下:

mysql>alter table vip modify id smallint default 1;#更改数据记录为1.

mysql>#alter table vip modify id smallint auto_increment;#大家执行一下这句话会提示错误,因为mysql中要求自动增长的列设为主键

mysql>alter table vip add primary(id);#设vip中的值的主键为id,执行这条语句后再执行上面的就没问题了。

mysql>alter table vip modify username char(30) not null;#改变vip的username为char(30);

mysql>alter table vip modify username mediumtext first; #改变vip中的username,并将它设在最前面字段,还有一个是after 字段,是指放在某字段后

对已有表新增字段

mysql> alter table vip add sex enum('M','F') default 'M' not null after id;#新增sex字段为enum类型,放在id的后面.

对已有字段改名

mysql>alter table vip change sex usersex tinyint default 0 not null after username;改名字段sex为usersex并改变类型和位置。

注:仅alter中modify,change很相似,但是modify不能改名只能改结构,但change即可以改名,也可以改类型。

删除字段

mysql>alter table vip drop usersex;#删除 usersex字段,警告,所有的该字段数据都会丢失。

数据库改名

mysql>alter table vip rename to vip_user;数据库进行改名。

改变数据表引擎

mysql>alter table vip engine="MyISAM";

注意,修改数据结构是一个很危险的事,最好做好备份,以防不侧。

还有部分的alter的语句和技巧我们将在以后涉及处一一到来.....

4. 关于数据约束数据约束在mysql5中支持的越来越好了,但是现有的数据约束仅限于innodb,传说中mysql5.2也会支持对数据约束的支持(期待..)

首先我们了解一下什么是数据约束,因为我们平常创建表中都可能会有互相关联的信息,而数据约束是将两个表进行关联的一种纽带。

例如:两个表,一个usertype,一为userid,usertype中有一个关键字key为用户类型编号,userid表中也有一 user_key对应着usertype表中的

1.首先我们要保证userid表中的所有值都在usertype中

2.其次我们要保证usertype中的值key进行改变userid表中的user_key值也会变化。

3.usertype中的值不能随意删除,除非userid表中不存在该usertype类型的值,如果要强制删除则会删除userid中的所有 usertype的值。

如果没有数据约束,我们每次insert/update可能要用数条语句才能保证数据的正确完整性,如果使用数据约束则只需要在定义的时候进行一下处理,而不用担心太多。而且最重要的是使用数据约束能够很好的保证数据,业务的完整性。

呵呵,说了这么多,还没有说数据约束的缺点:慢,使用数据约束要比不使用数据约束慢得多,而且用户每次插入数据或更改数据,数据库系统都会花一定的时间进行一定的检查.但是随着 mysql的日益成熟,这种速度会有着很大的改进。

就个人而言,我觉得非商务、实时系统对数据业务完整性要求较高的情况下使用数据约束还是很有必要的。其它情况下就仁者见仁智者见智了。

5.数据约束简明解析

所以外键的定义必须必须满足以下三种情况:

1.两个表必须是innodb表类型

2.指定为外键的列必须进行索引

3.两个表中关联的外键类型必须相符。

我们先来看例子,在例子中进行学习:

mysql> create table parent(id int null,primary key(id)) engine=innodb; #创建一个主表

mysql> create table child(id int,parent_id int,

foreign key(parent_id)

references parent(id) on delete restrict on update cascade

) engine=innodb; #创建一个从表,并约外键关键字为parent_id,建立之间的关联关系。

mysql> insert into parent values(1),(2),(3);#对主表插入数据

mysql> insert into child values(1,1),(1,2),(1,3);#对子表进行插入数据,对应不同的parent_id子child的id值均为1;

mysql> #insert into child values(1,1),(1,2),(1,3),(1,4); #看一下这会发生什么?报错是吧?什么原因?大家想想

说明:因为我们在创建语句的时候就约定了数据是进行外键关联的,而parent中不存在id值为4的主键,那么子键当然更新不了了。

这时数据库中的值为:

parent child

id id parent_id

1 1 1

2 1 2

3 1 3

我们继续操作以体现外键关联表的作用

mysql> update parent set id=4 where id=1;#改变parent的值看一下child的反应

mysql> select * from parent;

mysql> select * from child;

这时数据库中的值为:

parent child

id id parent_id

2 1 4

3 1 2

4 1 3

通过以上的例子大家可以清楚的看到用户只是改变parent的值,而关联的child值会自动改变。我们继续

mysql> insert into child values(2,4),(3,4),(4,4);#为子表再添加一些其它的值。

mysql> #delete from parent where id=4; #大家执行这条语句看一下有什么结果,错误吧?我们来分析一下提示错误

我们回顾一下我们创建外键的说细情况和关键语句:

foreign key(parent_id) #这句话的意思是指定对外关联键为本表的parent_id;

references parent(id) on delete restrict on update cascade#这句话是则约束语句,references可以约束本数据库的外键即parend_id与 parent数据表的id子键对应,并约束了on delete,on update时的操作,mysql共有以下几种操作:

(1) restrict、no action 表示如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 ,大家现在明白了吧?为什么我们执行delete from parent where id=4;时出现错误,因为子表(child)中还存在值.

(2) set null 在父表上update/delete记录时,将子表上匹配记录的列设为null,但要注意子表的外键列不能为not null

(3) cascade 在父表上update/delete记录时,同步update/delete掉子表的匹配记录

大家可以根据自己的需要设置不同的动作,例如,我们要在父表删除时,自动删除子表的关联值,则我们需进行设置:

references parent(id) on delete cascade on update cascade,实验之前我们须要知道

1.已经定义设置好的外键是无法再行更改的,必须要删除外键后再行创建(可能还有别的方法,哪位高手指点一下)

mysql> show create table child/G #得到 constraint(约束)的名字

说明:constraint是可以缺省的,用于指定约束的名字,如果不指定则系统会自动为它取名,例如我们可以这样:

constraint fk_child_key

foreign key(parent_id)

references parent(id) on delete restrict on update cascade;

这样我们就指定了这个约束的整体名称为fk_child_key,以后可以对这个进行操作了.

mysql> alter table child drop foreign key fk_child_key;#删除约束

mysql> alter table child add foreign key ('parent_id)

references parent(id) on delete cascade

on update cascade;

mysql> show create table child/G #至此约束已更改,用户可以查看一下更改情况

mysql>delete from parent where id=4;#我们再执行上面的那句,这时没错误了吧?

mysql>select * from parent;

mysql>select * from child; #我们可以看到现在与parent_id为4的全部删除。呵呵,以后都可以方便的使用了

这时数据库中的值为:

parent child

id id parent_id

2 1 2

3 1 3

6.数据约束 的额外说明

如果定义了数据约束,则数据的插入或更改速度会很慢,特别是更改数据结构,插入数据时,效率低的可怕。

当客户执行load data(载入数据,后续会介绍),alter table时建议使用以下命令,暂时关闭数据约束,等完成后再开启,这样速度至少可以提升20倍以上。

mysql> set foreign_key_checks=0;#关闭数据约束

mysql> load data infile '文件绝对地址' into table 表名;#从文本文件中载入大量数据

mysql> set foreign_key_checks=1;#打开数据约束相关阅读:

SlideView 图片滑动(扩展/收缩)展示效果

Z-Blog发表文章区标签教程

最大限度的分离table的样式与结构

连接MySQl的JavaBean

如何查询Vista系统的IP

原创批处理之网站屏蔽与解除屏蔽批处理

删除文件或文件夹的多种方法

可定制的PHP缩略图生成程式(需要GD库支持)

Oracle 11g最有特点的五大特性

Javascript 阻止浏览器默认操作的实现代码

把Windows Vista当成Linux系统来使用

用CSS实现网页图片的预加载

js中的escape及unescape函数的php实现代码

ajax回调函数参数传递正确方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区域赛第33天

1、最近感觉自己的时间可以利用好的,但是就是自己的学习效率比较低,主要问题就是一旦放松下来就会放松很长的时间,所以说浪费了很多的时间。。。 2、现在最重要的就是从心底相信自己真的能拿金牌,所以就是现在主要的任务就是恢复信…

用bat-抓取android日志

echo off cls set filename%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% set postfixdebug.log set debugfilename%filename%-%postfix% adb shell logcat -G 4M adb shell logcat > %debugfilename%pause

mysql报错error2002_mysql中异常错误ERROR:2002的解决方法分享

最近在启动mysql的时候发现mysql报错了,错误代码是2002,通过查找相关的资料发现是var/lib/mysql 的访问权限问题,所以这篇文章主要介绍了mysql中异常错误ERROR:2002的解决方法,需要的朋友可以参考借鉴,下面…

子矩阵(NOIP2014 普及组第四题)

描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与 列的相对顺序)被称为原矩阵的一个子矩阵。 例如,下面左图中选取第 2、4 行和第 2、4、5 列交叉位置的元素得到一个 2*3 …

linux spinlock/rwlock/seqlock原理剖析(基于ARM64)

背景Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio1. 概述吹起并发机制研究的进攻号角了!作为第一篇文章,应该提纲挈领的介绍下并发。什么是并发,…

isfull mysql_MySQL数据库之MySQL 出现 The table is full 的解决方法

本文主要向大家介绍了MySQL数据库之MySQL 出现 The table is full 的解决方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。当我们要写入新数据而发生“The table is full”告警错误时,先不要着急,按照下面的思…

RabbitMQ 资料整理

前言: 官方教程:    https://www.rabbitmq.com/getstarted.html 应用场景(之马云赚钱):    http://blog.csdn.net/whoamiyang/article/details/54954780    http://www.cnblogs.com/saltlight-wangchao/p/…

爸爸都老了

今天是父亲节,早上韦泽楠去上绘画课,我睡了个回笼觉,一觉睡到了十一点。起来的时候老婆买了新鲜的荔枝和龙眼,当然我没有马上吃,我不是一个随便的男人,我刷了牙,洗了脸,再回到客厅慢…

java输出日志_java代码中如何正确使用loggger日志输出

java代码中如何正确使用loggger日志输出发布时间:2019-06-28作者:spider阅读(2980)当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。使用slf4…

C#数组的声明方式

C#数组的五种声明方式一、声明一个未经初始化的数组引用,以后可以把这引用初使化为一个数组实例int[] intArray;intArray new int[10];注:数组的引用必须以相同或相关类型实例化,数组初使化默认值,值类型为0,引用类型…

大学的多级放大电路,你交给老师了吗?

第一章 设计任务1.1项目名称:设计三极管多级音频放大电路本项目的主要内容是设计并实现三极管多级音频放大功能。该电路将所学习的三极管基本放大电路与功率放大电路有机结合。1.2项目设计说明(1)设计任务和要求使用常见的小功率三极管设计一…

【u204】高级砝码称重

Time Limit: 1 second Memory Limit: 128 MB 【问题描述】 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0)。 【输入…

第十四节TypeScript 联合类型

1、简介 联合类型可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。 注意:只能赋值指定的类型,如果赋值其它类型就会报错的。 2、创建联合类型的语法格式: Type1|Type2|Type3 实例&a…

Linux进程调度器-基础

背景Read the fucking source code! --By 鲁迅A picture is worth a thousand words. --By 高尔基说明:Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio1. 概述从这篇文章…

java spring注解_spring注解是如何实现的?

注解呢,是java本身自带的一个东西,它基于java的接口进行实现,是一种特殊的接口类型,通常对于注解来说,三种情况,一个是在编译前就会被丢弃的,一个是编译后留在class中的,另一种是会一…

每天学习点--------第五天(2017-10-9) 摘要: 常用的集合

今天学习 java.util下面的软件包 包含 collection框架、遗留的coolection类、事件模型、日期和时间设施、国际化和各种工具类&#xff08;字符串标记生成器、随机数生成器和位数组&#xff09; 一、Collenction<.E> 接口 转载于:https://www.cnblogs.com/hanxue112253/p/…

Linux内存,先看这篇文章

内存大小计算我们拿32位系统来举个栗子2^32 ‭4,294,967,296‬ bytes‭4,294,967,296‬ bytes / 1024 ‭4,194,304‬ kbytes4,194,304‬ kbytes / 1024 ‭4,096‬ M‭4,096‬ M /1024 4G物理内存如何分页&#xff1f;分段和分页计算机内存管理的两种方式&#xff0c;这里我…

cloudstack java api_CloudStack API编程指引

前言本文阐述为CloudStack编写新API或者更新已存在API时应遵循的约定和编程指引。参考文档(暂略)介绍当你需要为CS添加新的API时&#xff0c;需要创建一个Request类和Response类(或者在扩展CS API功能时它的API Responese已经定义的情况下重用已经存在的API Response类)。编写C…

深入解析hostname

结论&#xff1a;/etc/sysconfig/network 确实是hostname的配置文件&#xff0c;hostname的值跟该配置文件中的HOSTNAME有一定的关联关系&#xff0c;但是没有必然关系&#xff0c;hostname的值来自内核参数/proc/sys/kernel/hostname&#xff0c;如果我通过命令sysctl kernel.…

在ODM公司要不要跳槽到创业公司

读者朋友提问&#xff1a; 发哥&#xff0c;我现在在手机odm公司做指纹模块做了两三个月&#xff0c;基本天天加班到十点以后&#xff0c;后面要被调到camera团队&#xff0c;但是从这几个月的经历来看&#xff0c;感觉学到的不多&#xff0c;代码都是供应商写的&#xff0c;很…