Mysql学习
语句规范:
关键字和函数名全部大写
数据库名 表名 字段名全部小写
语句必须以分号结尾
数据库操作
CREATE DATABASE t1; //建立一个数据库t1,放入系统数据库
SHOW DATABASES;
SHOW WARNINGS;//查看警告信息
SHOW CREATE DATABASEE t1;//查看编码格式
CREATE DATABASE IF NOT EXISTS t1 CHARACTER SET GBK;//建立一个已经存在的表并设置编码格式
修改数据库
ALTER DATABASE [DB_name] CHARACTER SET = utf8;//修改数据库编码格式
删除数据库
DROP DATABASE [IF EXISTS] db_name;
整理:
CREATE DATABASE 创建数据库
ALTER DATABASE 修改数据库
DROP DATABASE 删除数据库
数据类型:
整型: tinyint TINYINT 1字节
smallint SMALLINT 2字节
mediumint MEDIUMINT 3字节
int INT 4字节
bigint BIGINT 8字节
浮点型:float FLOAT (大约保存到小数点后7位)
double DOUBLE
时间日期类型: year YEAR
time TIME
data DATA(用来存储日期)
datatime DATATIME(时间日期)
timestamp TIMESTAMP(时间戳)
字符型:char
varchar 变长
tinytext
text
mediumtext
longtext
enum('value1','value2',...)枚举
set('value1','value2',...) 集合
创建数据表:
行 记录
列 字段
1.打开数据库 USE 数据库名;
SELECT DATABASE();//显示当前打开的数据库
2.创建数据表:
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,(列名称 数据类型)
...
);
例:
CREATE TABLE t1(
name VARCHAR(20),
age TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED
);
查看数据表:
SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr];
例:SHOW TABLES FROM mysql; //当前数据库不变
查看数据表结构:
SHOW COLUMNS FROM tb_name;
插入记录
INSERT [INTO] tb_name [(col_name,...)] VALUES(val,...)
例:INSERT t1 VALUES('TOM',25,7865); //省略列名,所有字段都要赋值
查看记录:
SELECT expr,...FROM tb_name
例:SELECT * FROM tb1;
空值与非空:
NULL 字段值可以为空
NOT NULL 字段值禁止为空
自动编号:AUTO_INCREMENT
必须与主键组合使用,默认初始值为1,每次增量为1
可以为整数或浮点数,但浮点数的小数位必须为0
自动编号的字段必须定义为主键才可以
主键:PRIMARY KEY
每张表只能存在一个主键
主键保证记录的唯一性
主键自动为NOT NULL
例:CREATE TABLE tb(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL
);
唯一约束:UNIQUE KEY
唯一约束可以保证记录的唯一性
唯一约束的字段可以为控制
每张数据表可以存在多个唯一约束
默认值:DEFAULT
当插入记录时,如果没有明确为字段赋值,则自动赋予默认值
整理:
数据类型:字符型、整型、浮点型、日期时间型
数据表操作:插入记录、查找记录
记录操作:创建数据表、约束的使用
约束:保证数据的完整性和一致性
约束分为表级约束和列级约束
约束类型包括:
not null 非空约束
primary key 主键约束
unique key 唯一约束
default 默认约束
foreign key 外键约束
外键约束:FOREIGN KEY
保证数据一致性、完整性
实现一对一或一对多关系
外键约束要求:
1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表
2.数据表的存储引擎只能为InnoDB
3.外键列和参数列必须具有相似的数据类型,其中数字的长度和是否有符号位必须相同;而字符的长度可以不同
4.外键列和参照列必须创建索引。如果参照?列不存在索引,mysql将自动创建索引
子表:具有外键列的表
例:CREATE TABLE provinces(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,//没有创建索引,但主键会自动创建索引
pname VARCHAR(20) NOT NULL
);
//SHOW CREATE TABLE provinces;
CREATE TABLE users(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces(id) //references foreign
);
//子表users 父表provinces
//查看是否创建索引:SHOW INDEXES FROM provinces/G;
外键约束的参照操作
1.CASCADE:从父表删除或更新且自动删除或更新子表中的匹配的行
2.SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
3.RESTRICT:拒绝对父表的删除或更新操作。
4.NO ACTION:标准的SQL的关键字,在MYSQL中与RESTRICT相同
CREATE TABLE users1(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces(id) ON DELECT CASCADE
);
//插入记录时要现在父表中插入,然后再在子表中插入
INSERT provinces(pname) VALUES ('A');
INSERT provinces(pname) VALUES ('B');
INSERT provinces(pname) VALUES ('C');
SELECT * FROM provinces;]
INSERT users(username,pid) VALUES('TOM',3);
//TOM所在省为C
cascade
set null
restrict