解决mysql乱码问题
脚本文件另存设置编码为utf8
客户端连接服务器端设置编码为UTF8
set names utf8;
服务器端创建数据库时设置编码为UTF8
create database xz charset = utf8;
mysql对应的数据类型
数值型
tinyint : 范围 -128~127
smallint :范围 -32768~32767
int :占四个字节
bigint: 了解
float: 单精度浮点型
double: 双精度浮点型
decimal(M,D): m代表有效位数 D代表小数点后有效位数
boolean/bool:布尔类型 true=1 false=0
字符串型
varchar(m):变长字符串,空间几乎不浪费,操作速率慢,max=65535
char(m):定长字符,空间会浪费,速率快,max=255;
日期时间型
date: 日期型
time:时间型
datetime:日期时间型
mysql简单约束关系
主键约束 —— primary key
唯一性:一个表中只能有一个主键约束;
不可重复性:声明了主键约束的列上,不能有重复值;
非空性:主键约束不能为NULL;
主键约束会加快数据的查找速率
id INT PRIMARY KEY
非空约束 —— not null
非空约束不能为null;
sname VARCHAR(8) NOT NULL
唯一约束 —— unique
声明了唯一约束的列上,禁止插入重复值
允许插入null(多个null)
phone INT UNIQUE
默认值约束 —— default
sex BOOL DEFAULT 1
性别的默认值设置为1
检查约束 —— check
salary DECIMAL(7,2) CHECK(salary >=0)
mysql不支持检查约束,会造成服务器压力,影响数据的插入速度
外键约束 —— foreign key
声明了外键约束的列,取值会到另一个表中的主键列上取值
允许插入NULL,一个表中可以有多个外键约束,即表的关联性
外键和对应的主键列数据类型要保持一致
foreign key (外键列名) references 另一个表(主键列名)
自增列 —— auto_increment
自增列必须添加在主键列上,允许手动赋值
id INT PRIMARY KEY AUTO_INCREMENT
练习:编写脚本文件01_tedu.sql,先丢弃再创建数据库tedu,设置编码UTF8,进入数据库,创建保存部门数据的表dept,包含部门编号did,部门名称dname(添加唯一约束),插入以下数据
10 研发部 20 市场部 30 运营部 40 测试部
创建保存员工数据的表emp,包含有编号eid,姓名ename(非空约束),性别sex(默认值),生日birthday,工资salary,所属部门编号deptId (添加外键约束)
#客户端连接服务器端设置编码为utf8
set names utf8;
#丢弃数据库,如果存在则删除
DROP DATABASE IF EXISTS tedu;
#创建数据库tedu
CREATE DATABASE tedu CHARSET = UTF8;
#进入数据库tedu;
USE tedu;
#创建数据库表dept
CREATE TABLE dept(
did INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR(8) UNIQUE
);
#插入数据
INSERT INTO dept VALUES(10,‘研发部’);
INSERT INTO dept VALUES(20,‘市场部’);
INSERT INTO dept VALUES(30,‘运营部’);
INSERT INTO dept VALUES(40,‘测试部’);
#创建表family
CREATE TABLE emp(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(8) NOT NULL,
sex BOOL DEFAULT 1,
birthday DATE,
salary DECIMAL(7,2),
deptId INT,
FOREIGN KEY (deptId) REFERENCES dept(did)
);