1. 数据查询语言DQL
2 .数据操纵语言DML(INSERT UPDATE DELETE)
3. 数据定义语言DDL
4. 数据控制语言DCL
1、创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名
DROP DATABASE 数据库名
2、建表
相关概念
1)主键
primary key
1.1 不能重复 可以是单个字段,或联合主键
1.2 不能为null
2)外键Foreign Key
设计一对一和一对多关系时用到,用来约束表数据的合法性。
3)Constraint
约束类型
not null 不允许为空
unique 唯一性
primary key 主键
foreign key 外键
default 默认值
check(mysql不支持)
数据类型
1)数值型(int,decimal(10,2) )
2)日期型(date datetime time)
3)字符串型(varchar)
建数据库表
数据类型:
数值型
int /integer整型 整数类型1,2,3,不带小数位的 一般第一个字段用这种类型,并且定义自动增长
decimal(10,2) 表示一位10位,其中小数位2位,整数位是10-2=8位。
上面两种类型是重要的,以下的了解
bit 2的0-6 1-64
tinyint2的0-8 1-256
boolean 真/假 true/false 1/0tinyint(1)
smallint 2的0-16
mediunint 2的0-24
int/integer 2的0-32
bigint 2的0-64 自增主键
float 可以存小数的,单精度 (模糊等于,不适合存太精确的值)
double 可以存小数的,双精度
decimal/dec decimal(M,N) 如果不定义小数位,默认小数位为0,即为整数。 对
字符串
varchar 可变长度字符串型 中文英文特殊符号 字母下划线 (非数字非日期) 0-65535 2的16次方-1
CHAR(M) 固定长度 假设m=10即使你向里放置的值是'abc'他自动用空格把内容被全到10位 'abc '
0-255 2的8次方-1
text 不常用 以二进制大对象。
blob二进制对象存储大数
字符串类型使用规则:
经常变化用varchar,固定长度就用char
尽量用varchar
如果超过255只能用varchar
能用varchar的也不要用text
日期型
datetimeyyyy-mm-dd hh:mm:ss 日期+时间
date 年月日yyyy-mm-dd yyyymmdd 日期
time hh:mm:ss hhmmss 时间
year yyyy 年
timestamp yyyymmdd hhmmss 时间戳
创建表:
create table表名(
字段名1 数据类型 约束PRIMARY KEY,
字段名1 数据类型 约束,
字段名n 数据类型 约束,
[CONSTRAINT`外键名` ]FOREIGN KEY(`当前表里的字段名`)REFERENCES`目标表名` (`目标字段名`)
)其他选项(例如存储引擎、字符集等选项)
例:
CREATE TABLE `t_student` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`stu_name` varchar(10) NOT NULL,
`birthday` datetime DEFAULT NULL,
`class_id` int(11) DEFAULT NULL,
CONSTRAINT `fk_classid` FOREIGN KEY (`class_id`) REFERENCES `t_class` (`class_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
注意:CONSTRAINT `fk_classid` 可以省略,简化后的代码
CREATE TABLE `t_student` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`stu_name` varchar(10) NOT NULL,
`birthday` datetime DEFAULT NULL,
`class_id` int(11) DEFAULT NULL,
FOREIGN KEY (`class_id`) REFERENCES `t_class` (`class_id`)
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
ENGINE=MyISAM或者InnoDB
CHARSET=utf8 国际化编码
存储引擎用InnoDB或MyISAM的区别
InnoDB支持事务和外键 他更好。
其他约束:
•NOT NULL,字段值不允许为空。
•NULL,字段值可以为空。
AUTO_INCREMENT(自动增长 定义在主键上 如果这个值输入null,自动补上
注意用AUTO_INCREMENT时该列必须定义为主键 )
•PRIMARY KEY,指定字段为主键。
•COMMENT,设置字段的注释信息。
•DEFAULT,设置字段的默认值。
例:
CREATE TABLE `t_class` (
`classno` int(11) NOT NULL AUTO_INCREMENTPRIMARY KEY,
`classname` varchar(255)DEFAULT ' ' COMMENT '班级名称',
`createdate` datetime DEFAULT NULL,
`stamp` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`sal` decimal(10,2) NOT NULL,
......
) ENGINE=INNODBDEFAULT CHARSET=utf8;
unique
Foreign KEY
作用:是对表数据合法性进行约束。该表的外键指向另一个表的主键
命名规则:主键pk_主键名
外键fk_外键名
unique uk_
用工具建外键(掌握):
用语句建:
DDL:数据定义语言 它的作用是会更改表结构
1)建表时直接建外建
foreign KEY( 当前表字段名)REFERENCES外部表名(外部表字段名)
注意:当前表字段类型一定与外建关联的字段类型相同,名称可以不同。
foreign KEY (deptno) REFERENCES dept(deptno)
*****enum(单选) set(多选)
create table person(
sex enum('男','女'),
interest set('听音乐','看电影','购物','旅游','游泳','游戏')
);
例子:带枚举和set类型的
CREATE TABLE `t_student2` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`stu_name` varchar(20) NOT NULL,
`birthday` date NOT NULL,
`sex` enum('男','女') DEFAULT NULL,
`interest` set('吃','喝','玩','乐','烫头') DEFAULT '',
`classid` int(11) DEFAULT NULL,
CONSTRAINT `fk_classid2` FOREIGN KEY (`classid`) REFERENCES `t_class` (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
习题
1.学校想做一个选课系统,其中涉及到课程表,学生表,请分别创建这两个表,自己思考表中应有的列及数据类型。
2.学校有一个选课系统,其中包括如下关系模式:
系(系编号: 主键,
系名称: 唯一键,
系主任: 非空约束,
系所在校去:取值范围只能在南湖校区和浑南校区)
班级(班级编号: 主键,
班级名称: 唯一键,
所属系: 外键)
3.创建学生表,包含如下属性:
学号 定长字符型 10位 主键
姓名 变长字符型 20位 非空
性别 定长字符型 2位 取值范围只能为男或女
出生日期 日期型
所在班级
第一步:系表
create table t_depart(
d_id int not null auto_increment PRIMARY key,
d_name VARCHAR(50) unique,
d_head VARCHAR(20) not null,
d_area enum('南湖校区','浑南校区')
)ENGINE=INNODB DEFAULT CHARSET=utf8;
第二步 :班级表
create table t_class(
c_id int not null auto_increment PRIMARY key,
c_name VARCHAR(50) UNIQUE,
d_id int(11) default null,
FOREIGN key (d_id) REFERENCES t_depart(d_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
第三步:
CREATE TABLE t_STUDENT(
s_id int(10) not null PRIMARY KEY,
s_name VARCHAR (20) not NULL,
sex enum ('男','女'),
birthday DATE ,
c_id int unique,
FOREIGN key (c_id) REFERENCES t_class(c_id )
)ENGINE=INNODB DEFAULT CHARSET=utf8;
复制表
•方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下。
•create table 新表名 like 源表
方法二、在create table语句的末尾添加一个select语句
create table 新表名 select * from 源表
复制表带数据
create table emp_bak2 select * from emp
复制表只要结构,不带数据
create table emp_bak2 select * from emp where 0>1
删除表
drop table 表名;
修改表
alter table表名 添加(add) 修改(modify) 删除表(drop) 结构
添加列:
•ALTER TABLE 表名ADD列名 数据类型 长度 列属性;
ALTER TABLE Emp ADD Tele VARCHAR(50) not NULL;
commit;
修改列
•ALTER TABLE 表名MODIFY 列名 新数据类型 长度 新列属性;
alter table emp MODIFY tele varchar(255);
commit;
删除列
•ALTER TABLE 表名DROP COLUMN列名;
alter table emp drop COLUMN tele;
commit;
操作约束条件(add modify drop)
alter table表名add constraint约束名 约束类型 (字段名);
alter table EMP add constraint PK_EMP primary key(EMPNO);
联合主键:
alter table EMP add constraint PK_EMP primary key(EMPNO,ename);
添加外建
alter table EMP add constraint FK_DEPTNO foreign key(DEPTNO) referencesDEPT (DEPTNO);
删除主建
alter table 表名 drop primary key; (一个表的主键只能有一个,删除时所以不需要指定名字)
alter table 表名 drop foreign key 外键名 ; (因为外键可以有多个)
alter table 表名 dropindex 索引名;
index:是索引的意思。索引是为了加快查询速度的。如果表数据量比较小,不建议建索引。
其他指令(了解)
• alter table 表名 engine=新的存储引擎类型
• alter table 表名 default charset=新的字符集
• alter table 表名 auto_increment=新的初始值
alter table 表名 pack_keys=新的压缩类型
修改表名
rename table 旧表名 to 新表名
转至:↓↓↓↓
链接:https://www.jianshu.com/p/8a7f36e2dbd6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。