mysql基础数据库创建
传统方法:创建{ }表表名{如果不存在}
(列表定义创建)
{表}的选项
{选项}分区;#正统的创作方式,具体的参数,请参阅MySQL手册,详细的解释,这里就不做,只说一些特别的。
例:
复制代码代码如下所示:
创建表的用户(ID int符号不空auto_increment,
用户名char(15),
性别(是的,默认是F),
varchar(20),
主键(ID、用户名),
指数idx_user(用户名),
)发动机= 'innodb'charset = utf8;
复制数据库结构:
复制代码代码如下所示:
创建{ } }表{如果不存在,}表名已经存在于表名中;创建与模拟表相同的结构
MySQL >创建表vip_user用户;
MySQL >创建表vip_user SELECT * FROM用户0; / /这能做的,只是复制结构
复制和复制数据库
复制代码代码如下所示:
{ }创建临时表SELECT * FROM新旧表名称;用户可以指定以下#人选择将需要声明。
创建表dst_tbl(
我没有空auto_increment int,
主键(id)
选择A,B,C)从src_tbl;
为了创建满足用户需求的各种数据库,这里只是做一个砖。
2。查看修改后的数据表结构
复制代码代码如下所示:
MySQL > desc是表结构的名称;#查看数据表
MySQL >显示创建表 G #数据表名视图构成报表,数据表和 G;同样的意思,但 G是一个垂直的显示,所以看得更清楚。
MySQL >显示表的地位一样 G #视图状态数据表名称表
MySQL >显示列的数据表名;#查看数据表的结构,如照片一样,但这一说法随后像场的使用可以只显示指定的字段
三.改变变基的结构
我们首先创建了一个表
MySQL >创建表的VIP(ID为null,用户名varchar(30));
修改表结构中的数据类型
复制代码代码如下所示:
MySQL >修改表VIP修改ID SmallInt默认1;#改变数据记录1。
MySQL > # ALTER TABLE VIP修改ID SmallInt auto_increment;#我们执行这句话会提示错误,因为MySQL自动增长的要求为主键列。
MySQL >修改表VIP添加主(ID);#套贵宾钥匙ID的值,在上述的实施是没有问题的执行此语句。
MySQL >修改表VIP修改用户名char(30)不为空;VIP用户名字符#变化(30);
MySQL >修改表VIP修改用户名mediumtext第一;在用户名VIP #变化,它位于前面的领域,有一个领域后,被放置在一个领域
现有表的新字段
MySQL >修改表的VIP加性别(是的,F)的默认'm'not无效后的身份;性别#枚举类型的新领域,放在背后的ID。
重命名现有字段
MySQL >修改表VIP改变性别usersex字段默认0不空后的用户名;改变名称字段更改的类型和位置。
注:只修改修改,变化非常相似,但修改不能改名,只需更改结构,但更改可以改名,也可以更改类型。
删除字段
MySQL >修改表VIP滴usersex;#删除usersex领域,预警领域,所有数据将丢失。
数据库改名
MySQL >修改表VIP重命名为vip_user;数据库改名。
更改数据表引擎
MySQL >修改表VIP引擎=表;
请注意,修改数据结构是危险的,最好做好备份工作。
还有一些我们将来将要涉及的更改语句和技术…
4。对数据的约束
数据约束越来越好在mysql5,但现有的数据约束是有限的InnoDB。在传说中,mysql5.2还将支持数据约束。
首先,我们将了解什么是数据约束,因为在通常的表创建中,我们可能有相互关联的信息,而数据约束是两个表之间的一个链接。
例如,有两个表,一个使用者,一个是UserType在关键的一个关键词,关键是用户的数量,还有一user_key用户表,对应到使用者的表。
1。首先我们要确保在用户表中的所有值都在使用者
2。其次,我们要确保在用户表中的值user_key UserType关键值的变化。
在3.usertype价值不能在任何时间删除,除非UserType类型的值不在用户表中存在。如果我们要强行删除,我们将删除用户所有UserType的价值观。
如果没有数据约束,我们可以使用几个句子来确保每次插入/更新时数据的正确性和完整性。如果我们使用数据约束,我们需要在定义的时候进行处理,而不必担心太多,最重要的是使用数据约束来确保数据和业务的完整性。
好了,说了这么多,也没有说数据约束:慢于不使用数据约束慢得多的数据约束,每次用户插入数据或改变数据,数据库系统将需要一些时间进行一些检查。但随着MySQL的成熟,速度会有很大的提高。
就个人而言,我认为在非业务、实时系统需要高数据业务完整性的情况下使用数据约束是必要的。
5。数据约束的简明分析
因此,外键的定义必须满足以下三种情况:
1。两表必须InnoDB表类型
2。指定为外键的列必须被索引。
三.两个表中的相关外键类型必须一致。
让我们先看看示例,然后在示例中学习。
MySQL >创建父表(ID int空主键(ID))发动机= InnoDB;#创建一个主表
MySQL >创建表的孩子(ID int,int parent_id,
外键(parent_id)
引用父(ID)上的删除限制更新级联
InnoDB引擎=;#)创建一个从表的外键,以及关键词parent_id,建立之间的关联关系。
MySQL >插入母值(1)、(2)、(3);#在主表插入数据
MySQL >插入孩子的价值观(1,1),(1,2),(1,3);#在表中插入数据,对应不同的parent_id儿童ID = 1;
MySQL > #插入孩子的价值观(1,1),(1,2),(1,3),(1,4);#看看会发生什么错了吗是什么原因我们再考虑考虑吧。
说明:因为当我们创建语句时,我们同意数据是通过外键连接的,而父ID中没有id值的主键,所以子密钥不会被更新。
此时数据库中的值为:
亲子
我parent_id
一百一十一
二百一十二
三百一十三
我们继续运作,以反映外键关联表的作用。
MySQL >更新父集ID = 4,ID = 1 #;家长看孩子的价值变化的反应
从父级选择*;
从孩子中选择*;
此时数据库中的值为:
亲子
我parent_id
二百一十四
三百一十二
四百一十三
通过上面的示例,您可以清楚地看到用户只更改父值,关联的子值将自动更改。
Mysql> insert into child values (2,4), (3,4), (4,4); # sub table and then add some other value.
MySQL > #删除从父id是4 #;我们执行此语句,看看有什么错误吗让我们分析一下提示。
我们回顾一下创建外键的优秀案例和关键语句:
外键(parent_id)#这句话的意思是外汇指定关联表parent_id关键;
引用父(ID)在限制删除级联更新的#这句话是一句约束,外键引用可以抑制数据库对应的数据表parend_id和家长身份的子密钥,并约束删除,更新操作,MySQL有以下操作:
(1)限制和不动作表明,如果子表中有匹配记录,则不允许对父表的相应候选键进行更新/删除操作。你现在明白了吗为什么我们从父母那里执行id = 4删除;有错误,因为在子表的值(孩子)。
(2)当集零记录的更新/删除父表的记录,匹配记录在子表的列设置为空,但需要注意的是,该数据库不能外部键列不为空的重要
(3)当级联记录父表上的更新/删除记录时,更新/删除下拉表的匹配记录是同步的。
您可以根据您的需要设置不同的操作,例如,当我们删除父表时删除子表时,我们需要设置设置。
在更新级联上删除级联的父(id)引用,我们需要在实验之前知道。
1、已定义的外键不能再更改。我们必须删除外键并重新创建它。
MySQL >显示创建表的孩子/ G #约束(约束)的名字
说明:约束是指定约束的默认名称,如果未指定,系统将自动命名它,例如,我们可以:
约束fk_child_key
外键(parent_id)
引用父(ID)上的删除限制更新级联;
In this way, we specify the overall name of the constraint as fk_child_key, which can be operated on later.
MySQL >修改表的外键fk_child_key孩子滴;#删除约束
MySQL >修改表的孩子添加外键('parent_id)
删除级联时引用父(id)
更新级联;
MySQL >显示创建表的孩子/ G #此约束已被更改,用户可以查看更改。
MySQL >删除从父id是4 #;我们重新执行上面的语句,它不是一个错误吗
从父级选择*;
MySQL >选择*从孩子#;我们可以看到现在parent_id删除所有4。Hehe,可方便地在未来。
此时数据库中的值为:
亲子
我parent_id
二百一十二
三百一十三
6。数据约束的附加描述
如果定义了数据约束,那么插入或改变数据的速度会很慢,尤其是在数据结构改变和数据插入效率低的情况下。
当客户执行负载数据(稍后将引入加载数据)时,修改表建议使用以下命令,暂时关闭数据约束,然后在完成后打开它,以便速度至少增加20倍以上。
MySQL >设置foreign_key_checks = 0;#关闭数据约束
MySQL > LOAD DATA INFILE '表'文件绝对地址表的名称;#加载数据从文本文件
MySQL >设置foreign_key_checks = 1;#开放数据约束