从头开始学MySQL--------表的基本操作
注意点提醒:
表结构变化之前要备份,因为数据是无法恢复的。
不是每张表都是需要主键的!
有外键关联的两张表必须使用相同的存储引擎。
自增属性默认从1开始。如果你插入的id是5,那么下次自增的id属性就是6。
4.1.1
获取所有数据库 show databases;
在创建表之前应该在命令行输入: use <databaseName> ,表明进入哪个数据库进行修改。
4.1.2 主键约束
主键,又称之为主码,是表中一列或多列的集合,不允许为空。它能唯一的标识表中的一条记录。
行称之为记录,列称之为字段或者属性。
CREATE TABLE temp7
(
id INT(11) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT(11)
);
//复合主键
CREATE TABLE temp8
(
id INT(11),
name VARCHAR(255),
age INT(11),
PRIMARY KEY(id,name)
)
4.1.3 外键约束
原: 一个表的外键可以为空值,若不为空,则每个外键必须等于另外一个表的主键的某个值。P50
外键要么为空,要么等于另外一个表的已经存在的主键。
主从表,谁是主表,谁是从表呢? A的外键指向B的主键。那么B是主表或父表,A是从表或子表。
外键的数据类型必须与主键的数据类型一致。
部门有ID ,员工表持有部门ID 。 那么是员工的外键指向部门的ID,所以员工是从表,部门是主表
//创建部门表
CREATE TABLE dept
(
id INT(11) PRIMARY KEY,
name VARCHAR(255) NOT NULL
) ;
//插入数据
INSERT INTO dept(id,name) VALUES(4,'开发部');
//创建employee表,设置外键约束
CREATE TABLE employee
(
id INT(11) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT(11),
deptId INT(11),
//外键语法:constraint foreignKeyName foreign key(属性) references 主表(主键)
CONSTRAINT fk_emp_dept FOREIGN KEY(deptId) REFERENCES dept(id)
);
//这里必须要指定部门表的某条记录的主键ID
INSERT INTO employee(id,name,age,deptId) VALUES(1,'大宇',22,4);
4.1.4 非空约束
数据不能为空。插入数据的时候,在数据类型后面追加NOT NULL。
4.1.5 唯一性约束
这个表里面这个字段,即这一列的每个值不允许重复。在数据类型后面追加UNIQUE。
PRIMARY KEY 与 QNIQUE的区别
UNIQUE允许数据为空,而PRIMARY KEY不允许为空。
4.1.6 使用默认值
在数据类型后面追加 DEFALUT 默认值。
小提示:批量插入的话,VALUES后面的每个小括号算一条数据。
DROP TABLE IF EXISTS dept;
CREATE TABLE dept
(
id INT(11) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) DEFAULT '苏州'
);
INSERT INTO dept(id,name) VALUES(1,'技术开发部');
4.1.7 设置主键自增
在数据类型后面追加 AUTO_INCREMENT
一个表只能有一个属性进行自增,一般是整数类型(INT、BIGINT、TINYINT)自增。
主键默认值从1开始。
只有主键才能设置自增!
DROP TABLE IF EXISTS dept;
CREATE TABLE dept
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) DEFAULT '苏州'
);
INSERT INTO dept(name) VALUES('技术开发部');
4.2.1 查看表结构
DESC 表名;
key有三个值。 PRI表示主键,UNI表示唯一性约束,MUL表示这个值能出现多次。
4.2.2 获取表详细的创建语句
SHOW CREATE TABLE 表名
4.3.1 修改表名
把表employee改名为 employee2
ALTER TABLE employee RENAME TO employee2
4.3.2 修改字段的数据类型(字段没动,所以用MODIFY)
把dept表的name字段长度从255修改成100
ALTER TABLE dept MODIFY name VARCHAR(100);
DESC dept;
4.3.3 更改字段名(字段都动了,所以用CHANGE)
把name属性更换成了chineseName属性。
//ALTER TABLE dept CHANGE 旧属性名 新属性名 数据类型 数据约束
ALTER TABLE dept CHANGE name chineseName VARCHAR(255) NOT NULL
4.3.4 添加字段
数据约束比如UNIQUE或者是NOT NULL 追加在数据类型后面即可。
//默认添加telephone到dept表的末尾
ALTER TABLE dept ADD telephone VARCHAR(255);
//添加number字段到dept表的开头
ALTER TABLE dept ADD number VARCHAR(255) FIRST;
//添加englishName字段到dept表的chineseName属性后面
ALTER TABLE dept ADD englishName VARCHAR(255) AFTER chineseName;
4.3.5 删除字段
//删除dept表的englishName字段
ALTER TABLE dept DROP englishName
4.3.6 修改字段的位置(当然类型也可以修改)
ALTER TABLE dept MODIFY telephone VARCHAR(255) FIRST;
ALTER TABLE dept MODIFY id INT(11) AFTER address;
4.3.8 删除外键约束
employee2表的外键信息如下
ALTER TABLE employee2 DROP FOREIGN KEY fk_emp_dept;
阅读更多