数据表操作
--1.创建表(类似于一个excel表)
--基本语法
CREATE TABLE 表名(
field1 type[完整性约束条件],
field2 type,
...
fieldn type
)[CHARACTER SET XXX];
--创建一个员工表employee
mysql>CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
gender BIT DEFAULT 1, -- gender CHAR(1) DEFAULT 1 --或者 TINYINT(1)
birthday DATE,
entry_date DATE,
job VARCHAR(20),
salary DOUBLE(4,2) unsigned,
resume TEXT -- 注意,这里作为最后一个字段不加逗号
);
/* 约束:
PRIMARY KEY (非空且唯一):能够唯一区分出当前记录的字段称为主键!
UNIQUE 唯一
NOT NULL 非空
AUTO_INCREMENT 主键字段必须是数字类型。使用AUTO_INCREMENT设置字段值自动增加。
外键约束 FOREIGN KEY */
--2.查看表信息
DESC 表名; --查看表结构,即查看表的字段信息,其中包括字段名、字段类型等信息
SHOW COLUMNS FROM 表名; --查看表结构
SHOW TABLES; --查看当前数据库中的所有的表
SHOW CREATE TABLE 表名; --查看当前数据库表建表语句
--3.修改表结构
--(1)增加列(字段) --默认在表已有字段的后面添加
ALTER TABLE 表名 ADD [COLUMN] 列名 类型[完整性约束条件][FIRST|AFTER 字段名];
--ALTER TABLE user ADD addr VARCHAR(20) NOT NULL UNIQUE FIRST/AFTER username;
--FIRST用于将新添加的字段设置为表的第一个字段
--AFTER用于将新添加的字段添加到指定的"已存在字段名"的后面
--添加多个字段
ALTER TABLE employee
ADD addr VARCHAR(20),
ADD age INT FIRST,
ADD depart VARCHAR(20) AFTER name;
--(2)修改一列类型
ALTER TABLE 表名 MODIFY 列名 类型 [完整性约束条件][FIRST|AFTER 字段名];
--ALTER TABLE employee MODIFY age TINYINT DEFAULT 20;
--ALTER TABLE employee MODIFY age TINYINT AFTER id;
--(3)修改列名
ALTER TABLE 表名 CHANGE [COLUMN] 列名 新列名 类型 [完整性约束条件][FIRST|AFTER 字段名];
--ALTER TABLE employee CHANGE age Age INT DEFAULT 28 FIRST;
--(4)删除一列
ALTER TABLE 表名 DROP [COLUMN] 列名;
--思考:删除多列呢?
ALTER TABLE 表名 DROP [COLUMN] 列名1,
DROP [COLUMN] 列名2;
--删一个填一个呢?
ALTER TABLE employee
ADD salary FLOAT(6,2) UNSIGNED NOT NULL AFTER name,
DROP addr;
--(5)修改表名
RENAME TABLE 表名 to 新表名;
--(6)修该表所用的字符集
ALTER TABLE student CHARACTER SET utf8;
ALTER TABLE student CHARACTER SET gbk;
--4.删除表
DROP TABLE 表名;
表的约束
PRIMARY KEY --主键约束,用于唯一标识对应的记录
FOREIGN KEY --外键约束
NOT NULL --非空约束
UNIQUE --唯一性约束
DEFAULT --默认值约束,用于设置字段的默认值
主键约束 --唯一标识表中的记录
--语法:
字段名 数据类型 PRIMARY KEY
单字段主键
mysql>CREATE TABLE users(
id INT PRIMARY KEY,
name VARCHAR(20),
city VARCHAR(20)
);
主键字段特点:非空且唯一
多字段联合主键
mysql>CREATE TABLE users2(
id INT,
name VARCHAR(20),
city VARCHAR(20),
PRIMARY KEY(name,id)
);
<1> 一张表只能有一个主键
<2> 主键类型不一定非是整型
--添加主键,
ALTER TABLE 表名 ADD PRIMARY KEY(字段名称,...);
--删除主键
ALTER TABLE users DROP PRIMARY KEY;
--每张表必须有主键
mysql> CREATE TABLE test5(num INT AUTO_INCREMENT);
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
--修改如下
mysql>CREATE TABLE test(num INT PRIMARY KEY AUTO_INCREMENT);
--思考,如何删除主键?
ALTER TABLE test MODIFY id INT; -- auto_increment没了,但这样写主键依然存在,所以还要加上下面这句
ALTER TABLE test DROP PRIMARY KEY;-- 仅仅用这句也无法直接删除主键
非空约束 --字段的值不能为NULL
字段名 数据类型 NOT NULL
mysql>CREATE TABLE users3(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
grade FLOAT
);
唯一约束 --用于保证数据表中字段的唯一性,即表中字段的值不能重复出现。
mysql>CREATE TABLE users4(
id INT PRIMARY KEY,
stu_id INT UNIQUE,
name VARCHAR(20) NOT NULL
);
默认约束 --用于给数据表中的字段制定默认值,即当在表中插入一条新纪录时,如果没有给这个字段赋值,那么,数据库系统会自动为这个字段插入默认值。
mysql>CREATE TABLE users5(
id INT PRIMARY KEY AUTO_INCREMENT,
stu_id INT UNIQUE,
grade FLOAT DEFAULT 0
);