MySQL建表约束条件及键值

约束条件
Null 允许为空
Not NULL 不允许为空
Key 索引类型
Default 设置默认值,缺省为NULL
例:

mysql> use db2; 
mysql> create table t1( 
    -> name char(10) not null, 
    -> age tinyint not null default 25, 
    -> likes set("eat","sleep","play") default "eat,sleep" 
    -> ); 
mysql> desc db2.t1; 
mysql> insert into db2.t1(name) values( 
    -> "bob" 
    -> ); 
mysql> select * from db2.t1; 

如果要修改字段为非空,该字段的值里面不能有空值null,不然会冲突

修改表结构
语法结构
基本用法:alter table 表名 执行动作
Add 添加字段
Modify 修改字段类型
Change 修改字段名
Drop 删除字段
Rename 修改表名

1.添加新字段
Alter table 表名 add 字段名 类型(宽度) 约束条件;
可以after 字段名; 或者 first;
例:

mysql> desc t1; 
mysql> alter table t1 
    -> add email varchar(30) default "stu@qqq.cn", 
    -> add tel char(11); 
mysql> select * from t1; 
mysql> alter table t1 
    -> add stu_num char(9) first; 
mysql> select * from t1;   
mysql> alter table t1 
    -> add class char(7) default "test1" after name; 
mysql> select * from t1; 

修改字段类型
Alter table 表名 modify 字段名 类型(宽度) 约束条件;
可加after 字段名; 或 first;
例:

mysql> desc t1; 
mysql> alter table t1  
    -> modify stu_num varchar(10); 
mysql> desc t1; 
mysql> alter table t1 
    -> modify age tinyint default 25; 
mysql> desc t1; 
mysql> alter table t1 modify age tinyint default 25 after name; 
mysql> desc t1; 
mysql> select * from t1; 

不能与原有表约束条件发生冲突,否则会报错
枚举类型的修改:如果已经保存的数据里包含原有的举例,则不能修改原有的例子,但是可以添加新的例子。如果修改default,不会对以保存的数据有影响
例:

mysql> desc t1; 
mysql> select * from t1; 
mysql> alter table t1 
    -> modify likes set("eat","sleep","play","it","book") null default "it,book"; 
mysql> desc t1; 
mysql> select * from t1; 

3.修改字段名
Alter table 表名 change 原字段名 新字段名 类型(宽度) 约束条件;
例:

mysql> alter table t1 
    -> change email mail varchar(30) default "stu@qqq.cn"; 
mysql> desc t1; 

当跟新类型和约束条件时,也可修改字段类型

4.删除字段
Alter table 表名 drop 字段名;
例:

mysql> alter table t1 
    -> drop mail, 
    -> drop class; 
mysql> desc t1; 
mysql> select * from t1; 

表中有多少条记录时,所有列的此字段的值都会被删除

修改表名
Alter table 表名 rename 新表名; (表对应的文件名也会改变)
例:

# ls /var/lib/mysql/ 
mysql> show tables; 
mysql> alter tabel t1 
    -> rename stutab; 
mysql> show tables; 
# ls /var/lib/mysql/ 

MySQL键值
MySQL索引:对记录集的多个字段进行排序的方法
(Btree(默认,二叉树算法)、B+tree、hash、FULLTEXT)
加快数据的检索速度
索引需要占物理空间
键值类型:INDEX(普通索引)
UNIQUE(唯一索引)
FULLTEXT(全文索引)
PRIMARY KEY(主键)
FOREIGN KEY(外键)

INDEX普通索引使用说明
一个表中可以有多个INDEX字段;字段的值允许有重复,且可以赋NULL值;经常把做查询条件的字段设置为INDEX字段;INDEX字段的KEY标志是MUL
建表的时候指定索引字段
index(字段1),index(字段2)…
在已有表中设置索引字段
Create index 索引名 on 表名(字段名);
删除指定表的索引字段
Drop index 索引名 on 表名;
例:

mysql> create index name on t1(name); 
mysql> desc t1;                                           //已有表 
mysql> show index from t1\G; 
 
mysql> create table t2( 
    -> name char(10) not null, 
    -> age tinyint not null default 25, 
    -> likes set("eat","sleep","game","zhang")             //建表时 
    -> default "eat,sleep", 
    -> index(name),index(age) 
    -> ); 
mysql> desc t2; 
mysql> show index from t2\G; 

PRIMARY KEY(主键)
一个表中只能有一个primary key字段
对应的字段值不允许有重复,且不允许赋NULL值
如果有多个字段都作为primary key,称为复合主键,必须一起创建
主键字段的KEY标志是PRI
通常与AUTO_INCREMENT连用
经常把表中能够唯一标识记录的字段设置为主键字段[记录编号字段]
建表的时候指定主键字段
Primary key(字段名);
例(两种写法):

mysql> create table t3( 
    -> name char(5), 
    -> class char(7), 
    -> stu_num char(9), 
    -> primary key(stu_num) 
-> ); 
mysql> desc t3;    
 
mysql> create table t3( 
    -> name char(5), 
    -> class char(7), 
    -> stu_num char(9) primary key 
    -> ); 
mysql> desc t3;    

复合主键(只有一种写法)
例:

mysql> create table t4( 
    -> clientip char(15), 
    -> serport smallint unsigned, 
    -> status enum("allow","deny"), 
    -> primary key(clientip,serport) 
    -> ); 
mysql> desc t4; 
mysql> insert into t4 values("1.1.1.1",22,"deny"); 
mysql> insert into t4 values("1.1.1.1",21,"allow"); 
mysql> insert into t4 values("1.1.1.1",21,"allow");   (x)同时重复就不可以 

在已有表中设置主键字段
Alter table 表名 add primary key(字段名);
例:假设alter table t4 drop primary key;

mysql> alter table t4  
    -> add primary key(clientip,serport); 

移除表中主键字段
Alter table 表名 drop primary key;
例:

mysql> alter table t3 drop primary key; 
mysql> desc t3; 
复合主键中不能选择只删除某一个主键 

AUTO_INCREMENT:让字段的值自动增长+1
条件:数值类型,primary key
例:

mysql> create table t5( 
    -> id int primary key auto_increment, 
    -> name char(10), 
    -> age tinyint 
    -> ); 
mysql> desc t5; 
mysql> insert into t5(name,age) values("bob",19); 
mysql> insert into t5(name,age) values("tom",19); 
mysql> insert into t5(name,age) values("lucy",19); 
mysql> select * from t5; 

删除包含自增长的主键:

mysql> alter table t5  
    -> modify id int not null; 
mysql> desc t5; 
mysql> alter table t5 drop primary key; 
mysql> desc t5; 

Foreign key(外键)
让当前表字段的值在另一个表中字段值的范围内选择
条件:表的存储引擎必须是innodb
字段类型要一致
被参照的字段必须是索引类型的一种(primary key)
基本用法
Foreign key(表A的字段名)
Reference(表B字段名)
On update cascade //同步更新
On delete cascade //同步删除
例:
创建外键

mysql> create table yg( 
    -> yg_id int primary key auto_increment, 
    -> name char(10) 
mysql> insert table yg(name) values("bob"); 
mysql> insert into yg(name) values("tom"); 
mysql> select * from yg; 
mysql> create table gz( 
    -> gz_id int, 
    -> pay float(7,2), 
    -> foreign key(gz_id) references yg(yg_id) 
    -> on update cascade on delete cascade 
    -> )engine=innodb; 
mysql> desc gz; 
mysql> show create table gz\G; 

测试外键

mysql> insert into gz values(1,45000); 
mysql> insert into gz values(2,15000); 
mysql> select * from gz; 
mysql> insert into gz values(3,25000);            //(x)报错 
mysql> insert into yg(name) values("jack"); 
mysql> select * from yg; 
mysql> insert into gz values(3,25000); 
mysql> select * from gz; 

同步更新、同步删除

mysql> delete from yg where yg_id=1; 
mysql> select * from yg; 
mysql> select * from gz; 
mysql> update yg set yg_id=8 where yg_id=2; 
mysql> select * from yg; 
mysql> select * from gz; 
 
mysql> select * from gz; 
mysql> insert into gz values(8,30000); 
mysql> insert into gz values(8,30000); 
mysql> insert into gz values(8,30000); 
mysql> select * from gz; 
mysql> delete from gz; 
mysql> select * from gz; 
mysql> alter table gz  
    -> add primary key(gz_id); 
mysql> desc gz; 
mysql> insert into gz values(8,30000); 
mysql> insert into gz values(8,30000);     //重复的不能写,空的不能写,yg表没有的不能写 

删除外键字段

Alter table 表名 drop foreign key 约束名; 
mysql> show create table gz; 
mysql> alter table gz drop foreign key gz_ibfk_1; 
mysql> show create table gz; 
外键约束名称在FOREIGN KEY前面 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,可以通过约束来保证表中数据的完整性和一致性。常见的约束有主键约束、唯一约束、非空约束和外键约束等。下面是MySQL建表时的约束介绍: 1. 主键约束:主键是一种特殊的唯一约束,它能够唯一确定一张表中的一条记录。在MySQL中,可以通过以下两种方式添加主键约束: ①在创建表时添加主键约束: ```mysql CREATE TABLE user ( id INT PRIMARY KEY, # 添加主键约束 name VARCHAR(20), age INT ); ``` ②在创建表后添加主键约束: ```mysql ALTER TABLE user ADD PRIMARY KEY (id); # 添加主键约束 ``` 2. 唯一约束:唯一约束用于保证某个字段的值在表中是唯一的。在MySQL中,可以通过以下两种方式添加唯一约束: ①在创建表时添加唯一约束: ```mysql CREATE TABLE user ( id INT, name VARCHAR(20) UNIQUE, # 添加唯一约束 age INT ); ``` ②在创建表后添加唯一约束: ```mysql ALTER TABLE user ADD UNIQUE (name); # 添加唯一约束 ``` 3. 非空约束:非空约束用于保证某个字段的值不为空。在MySQL中,可以通过以下两种方式添加非空约束: ①在创建表时添加非空约束: ```mysql CREATE TABLE user ( id INT, name VARCHAR(20) NOT NULL, # 添加非空约束 age INT ); ``` ②在创建表后添加非空约束: ```mysql ALTER TABLE user MODIFY name VARCHAR(20) NOT NULL; # 添加非空约束 ``` 4. 外键约束:外键约束用于保证表与表之间的数据一致性。在MySQL中,可以通过以下两种方式添加外键约束: ①在创建表时添加外键约束: ```mysql CREATE TABLE order ( id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES user(id) # 添加外键约束 ); ``` ②在创建表后添加外键约束: ```mysql ALTER TABLE order ADD FOREIGN KEY (user_id) REFERENCES user(id); # 添加外键约束 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值