把MySQL的一些常用语句和知识整理了一下可供参考。博客园的Markdown不支持TOC有点尴尬
登陆
mysql -uroot -ppassword -P3306 -hhost(127.0.0.1)
MySQL语句规范
- 关键字与函数名都大写
- 数据库名,表名,字段名小写
- SQL语句以分号结尾
常用语句示范
- SELECT VERSION();
作用:显示版本号 - SELECT NOW();
作用:显示时间 - SELECT USER();
作用:显示使用者 - CREATE {DATABASE} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
作用:创建数据库
例如:CREATE DATABASE IF NOT EXISTS test1 DEFAULT CHARACTER SET =utf8
CREATE DATABASE test1 CHARACTER SET utf8 - SHOW {DATABASES} [LINK ‘pattern’]
作用:显示已经有的数据库 - ALTER {DATABASE} [db_name] [DEFAULT] CHARACTER SET [=] charset_name
作用:修改数据库编码 DROP {DATABASE} [IF EXISTS] db_name
作用:删除数据库数据类型
- TINYINT
有符号型:-128-127(1字节)
无符号型:0-255 - SMALLINT(2字节)
[U]:-32768
[S]:0-65535 - MEDIUMINT (3字节)
- INT (4字节)
- BIGINT (8字节)
- FLOAT[(M,D)] M数字总数,D为小数点后的位数,7位小数左右
- DOUBLE[(M,D)]
- YEAR 1
- TIME 3
- DATE 3
- DATETIME 8
TIMESTAMP 4(一般不用,用数字来做,跨时区等问题)
- CHAR(M) M个字节 M的范围0-255
- VARCHAR(M) L+1个字节 L<=M 0<=M<=65535
- TINYTEXT L+1字节 L<28
- MEDIUMTEXT
- LONGTEXT
- ENUM 可供选择的集合
SET 集合
数据表
数据表是数据库最重要的组成部分之一
行:记录
列:字段
SQL语句
登录后用USE db_name打开数据库
用SELECT DATABASE(); 检验
CREATE TABLE [IF NOT EXISTS] table_name (
Column_name data_type,
….
)
比如:
CREATE TABLE tb1(
Username VARCHAR(20) NOT NULL,
Age TINYINT UNSIGNED NULL,
SALARY FLOAT(8,2) UNSIGNED
);
注:NOT NULL 标注属性是否允许字段为空SHOW TABLES [FROM db_name] [LIKE ‘pattern’]
作用:显示数据表(从某个库中):注意当前数据库不会改变SHOW COLUMNS FROM tbl_name
作用:显示字段3. INSERT [INTO] tbl_name [(col_name,…)] VALUES(val,…)
作用:插入记录,如果省略(col_name),需要赋值所有的值4. SELECT expr,…. FROM tbl_name
作用:查找记录
SELECT * FROM tb1(*过滤字段)
属性讲解
- NULL | NOT NULL 值是否为空
- AUTO_INCREMENT :自动编号,与主键组合使用;
默认形况下,起始值为1,增量为1; - PRIMARY KEY :
主键约束,一张表一个主键
主键保证唯一性
主键自动NOT NULL
可以写成KEY
比如:
CREATE TABLE tb3(
Id SMALLINT USSIGNED AUTO_INCREAMENT PRIMARY KEY,
Username VARCHAR(20) NOT NULL
); - UNIQUE KEY
唯一约束 - DEFAULT
默认值
举例:
CREATE TABLE tb3(
Id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
Username VARCHAR(20) NOT NULL,
Sex ENUM(‘MALE’,’FEMALE’,’secret’) DEFAULT ‘secret’**
);
约束
- 表级约束
- 列级约束
- 约束类型:非空约束,主键约束,唯一约束,默认约束,外键约束
- 外键约束:FOREIGN KEY
- 保持数据一致性,一对一或一对多
- 父表子表用一样的引擎:InnoDB,禁止使用临时表
- 数字的类型必须一样,字符型长度可以不一样
- 外键列和参照列必须创建索引,如果外键列没有索引,MySQL自动创建
- 例子:
CREATE TABLE users(
Id SMALLINT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(20) NOT NULL,
PID INT,
FOREIGN KEY (PID) REFERENCES province (id)
);
Pid的类型必须和id相同 - 参照操作
CASCADE:从父表删除或更新则自动删除或更新子表中的行
SET NULL:从父表删除或更新行,设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
RESTRICT:拒绝对父表的删除或更新操作
NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同
例子:
CREATE TABLE users(
Id SMALLINT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(20) NOT NULL,
PID INT,8
FOREIGN KEY (PID) REFERENCES province (id)ON DELETE CASCADE
);