CREATE DATABASE [IF NOT EXISTS] db_name [create_specification] ...
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
说明:
IF NOT EXISTS:判断当前系统中是否有要创建的这个数据库,如果有的话,不再执行创建,而且不会报错
CHARACTER SET:指定当前数据库所采用字符类型(utf8)
COLLATE:指定排序规则
例子:
CREATE DATABASE IF NOT EXISTS jobs DEFAULT CHARACTER SET utf8
DROP DATABASE [IF EXISTS] db_name
IF EXISTS:判断当前系统中是否有要删除的这个数据库,如果有执行删除操作,如果没有不再执行删除操作,而且不会报错
例子:DROP DATABASE IF EXISTS test;
这里往往仅仅是修改数据库中的字符集类型和排序规则(不能修改修改数据库名)
ALTER DATABASE [db_name] alter_specification ...
alter_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
例子:修改test1的字符集为utf8
ALTER DATABASE test1 DEFAULT CHARACTER SET utf8;
修改数据库名称:
先对要修改名称的数据库做备份,然后新建一个数据库,库名就是新的名字,然后将备份的数据还原到这个新库中
ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME
方法一:直接创建一张新表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
TEMPORARY:该选项表示所创建的是一张临时表,表是在内存中
create_definition:
col_name column_definition
| PRIMARY KEY (col_name1, col_name1...)
| {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] ...
| [CONSTRAINT UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option] ...
| {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...) [index_option] ...
| [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition
| CHECK (expr)
table_option:
AUTO_INCREMENT [=] value <<< 指定主键从几开始自增
| ENGINE [=] engine_name <<< 指定表所使用的存储引擎
| [DEFAULT] CHARACTER SET [=] charset_name <<< 指定当前表的字符集(不指定会继承)
| CHECKSUM [=] {0 | 1} <<< 指定是否对插入的数据做校验(可以保证数据一致,但是会带来额外的系统开销)
| [DEFAULT] COLLATE [=] collation_name <<< 指定当前表的排序规则(不指定会继承)
| COMMENT [=] 'string' <<< 指定当前表的描述说明信息
| DELAY_KEY_WRITE [=] {0 | 1} <<< 延迟键写入,推迟重建索引的间隔
| MAX_ROWS [=] value
| MIN_ROWS [=] value
| UNION [=] (tbl_name[,tbl_name]...) <<< 做表联合
| TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}] <<< 定义表空间
| ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} <<< 定义表格式
例子:创建一张表,id为主键、name长度为30,age为整型
CREATE TABLE tb1 (id int PRIMARY KEY, name char(30), age int(3))
CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id))
例子:创建一张表,id和name构成联合主键、name长度为30,age为整型
CREATE TABLE tb2 (id int, name char(30), age int(3), PRIMARY KEY(id,name))
方法二:根据现有表创建新表,而且新表中的数据也是来自于现有表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[partition_options]
[IGNORE | REPLACE]
[AS] query_expression
例子: CREATE TABLE new_tb AS SELECT * FROM old_tb;
注意:这种操作在系统看来是不安全的,如果要使用这种方法创建表需要修改配置文件将
gtid-mode = on改为off
enforce-gtid-consistency= 1改为0
方法三:根据现有表创建新表,但是仅仅有表结构
CREATE TABLE [IF NOT EXISTS] tbl_name LIKE old_tbl_name
例子:基于mysql.user表的表结构创建新表
CREATE TABLE tb01 LIKE mysql.user;
删除表简单实用DROP命令即可,但要注意做好指定。
DROP TABLE [IF EXISTS] tbl_name [, tbl_name]... [CASCADE]
说明:
CASCADE:级联删除
格式:
ALTER TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]
DROP col_name
例子:删除age字段
ALTER TABLE tb1 DROP age;
ADD col_name column_definition [FIRST | AFTER col_name]
例子:
# 在age字段后添加一个新的字段school
ALTER TABLE tb1 ADD school CHAR(10) AFTER age;
# 在最前面插入字段job
ALTER TABLE tb1 ADD job CHAR(20) NOT NULL FIRST;
# 在末尾添加一个新字段phone
ALTER TABLE tb1 ADD phone int(10);
CHANGE old_col_name new_col_name column_definition [FIRST|AFTER col_name]
例子: ALTER TABLE tb1 CHANGE job jobs char(30) not null;
MODIFY col_name column_definition [FIRST | AFTER col_name]
例子:ALTER TABLE tb1 MODIFY name varchar(50) NOT NULL DEFAULT 'zx';
注意无法修改字段名称
ALTER TABLE tb1 MODIFY name varchar(50) AFTER age;
ADD index [索引类型] (字段1,字段2...) [options]
例子:将索引添加(删除)到 name字段上
ALTER TABLE tb1 ADD(DROP) INDEX (name);
查看表中的索引
SHOW INDEXES FROM tb1;
注意:索引不是越多越好
#主键约束
| ADD [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (index_col_name,...) [index_option] ...
#唯一约束
| ADD [CONSTRAINT [symbol]]
UNIQUE [INDEX|KEY] [index_name]
[index_type] (index_col_name,...) [index_option] ...
#唯一约束要建立在索引上,也就是对某字段设置唯一约束时,该字段要是索引。
关于主键(删除、禁用、启用)
DROP PRIMARY KEY #删除主键
{DISABLE|ENABLE} KEYS #禁用和启用主键
#方法1:
ALTER TABLE 表名 RENAME [TO|AS] 新表名
ALTER TABLE user10 RENAME TO user11;
方法2:
RENAME TABLE 表名 TO 新表名; 这里面的TO不可以省略
RENAME TABLE user11 TO user10;
注意:如果表中有索引或者主键,那么无法按照指定的字段排序
ORDER BY col_name [, col_name] ...
CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
INSERT INTO tb1(name,id,age) VALUES('dong',1,23);
将name为zx的年龄修改为25
UPDATE tb01 set age=25 WHERE name='zx';
SELECT 字段名... FROM 表名 [条件] [选项]
例子:查询t09中的全部数据
> SELECT * FROM t09;
例子:查询t09中的id
> SELECT id FROM t09;
例子:查看所有id大于5的记录
> SELECT * FROM t09 WHERE id>5
例子:查看所有id大于5的记录的中的name字段
> SELECT name FROM t09 WHERE id>5
条件表达方式 | 释义 |
---|---|
=、<、>、>= 、<= | 等于、小于、大于、大于等于、小于等于 |
!=、<> | 不等于 |
is null | 为空 |
is not null | 不为空 |
between…and… | 在…和…之间 |
like … | 结合通配符 |
RLIKE | 结合正则 |
组合条件查询关键字:and、or、not
order by 字段 [desc|asc] 根据指定字段进行降序或升序排列
limit num:仅仅显示num条记录
limit m,n:意思是跳过m个记录向后取n条数据
案例:将年龄在20-25的用户名和用户id显示出来
mysql> select name,stuid,age from students where age>=20 and age<=25;
mysql> select name,stuid,age from students where age between 20 and 25;
案例:将年龄在小于20,或者大于25的用户名和用户id显示出来
select stuid,name,age from students where age<20 or age>25;
案例:显示用户名是以S为开头的用户名和年龄
mysql> select name,age from students where name like 'S%';
案例:显示用户名是以Y为开头,且年龄是19的用户
mysql> select name,age from students where name like 'Y%' and age=19;
案例:显示用户名是以Y为开头,且年龄小于20的用户
mysql> select name,age from students where name like 'Y%' and age<20;
案例:显示所有用户的用户名和年龄
mysql> select name,age from students;
案例:显示所有用户的用户名和年龄,要求按照年龄排序(从大到小排)
mysql> select name,age from students order by age desc;
案例:显示所有用户的用户名和年龄,要求仅仅显示年龄最大的三个用户
mysql> select name,age from students order by age desc limit 3;
案例:统计students表有多少行
mysql> select count(*) from students;
案例:显示年龄最大的用户的年龄
mysql> select max(age) from students;
大致汇总,如有不当之处欢迎指正。
------做运维之前很矫情的小年轻-----