一、主键
添加主键三种方法:
1)创建表:
1 CREATE TABLE test01 (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20))
2)也是创建表的时候添加,但是添加位置为约束区域。所谓约束区域就是字段定义完之后的代码位置。
1 CREATE TABLE test02 (id INT AUTO_INCREMENT ,username VARCHAR(22),PRIMARY KEY(id))
3)是创建表之后,直接修改表进行主键创建:
1 CREATE TABLE test03(id INT ,username VARCHAR(22));
1 ALTER TABLE test03 ADD PRIMARY KEY(id);
4)truncate 和delete
1、truncate 是删除表,重新创建表。属于DDL(Data Definition Language 数据库定义语言)
delete属于清空原先的记录。属于DML(Data Manipulation Language 数据库操作语言)
2、delete from属于删除表中的原先的记录,逐条进行删除,再次插入会接着之前的ID值的。
1 SELECT * FROM test01; 2 INSERT INTO test01(username) VALUES("tom"); 3 DELETE FROM test01; 4 INSERT INTO test01(username) VALUES('ok')
而truncate 是直接删除表,之后继续创建新的表。
5)auto_creatment 需要满足以下条件:
1、被修饰的字段必须支持自增,一般是int类型
1 CREATE TABLE test04( 2 id VARCHAR(22) AUTO_INCREMENT, 3 usrername VARCHAR(333) 4 )
报错:Incorrect column specifier for column 'id'
2、被修饰的字段,一般作为表的key,一般是primary key
1 CREATE TABLE test04 ( 2 id INT AUTO_INCREMENT, 3 usrername VARCHAR(333) 4 )
报错:Incorrect table definition; there can be only one auto column and it must be defined as a key
6)一对多:
在我们日常中经常会出现一对多的场景,比如说,用户订单和用户之间的关系就是一对多的关系,多的是订单(多表),一是用户。在实际生产环境中,有一些不建立外键,(处于维护角度)通过程序来控制逻辑关系。还有一种通过外键关系来创建之间关系。
我们一般在多表中建立外键约束。
语法:
alter table 多表名称 add foreign key (外键名称) references 表名称(主键)
ALTER TABLE orders ADD FOREIGN KEY(user_id) REFERENCES users(id)
1 CREATE TABLE users ( 2 id INT AUTO_INCREMENT , 3 username VARCHAR(33), 4 PRIMARY KEY(id) 5 ) 6 7 INSERT INTO users(username) VALUES('ok') 8 9 SELECT * FROM users; 10 11 CREATE TABLE orders( 12 id INT AUTO_INCREMENT PRIMARY KEY, 13 totalprice DOUBLE 14 ) 15 16 17 ALTER TABLE orders ADD COLUMN user_id INT;
多表插入不存在user_id 的时候,出现Cannot add or update a child row: a foreign key constraint fails (`test`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))错误。
插入存在的userid的话。
删除可以正常删除:DELETE FROM orders WHERE user_id=1;