数据库社会保险

日增多少

insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:

Insert into 表名(字段列表) values (值列表);

insert [into] 表名 [(列名1, 列名2, 列名3, …)] values (值1, 值2,
值3, …);

insert into students values(NULL, “张三”, “男”, 20, “18889009876”);

奇迹大家只需要插入部分数据, 或者不依照列的次第举办插队,
可以应用这样的款式举行扦插:

insert into students (name, sex, age) values(“李四”, “女”, 21);

 

#1、添加数据

 

insert into stu(name,sex,age) values(‘张学友’,’男’,18);

insert into stu(name,sex,age) values(‘张娜拉’,’女’,73);

insert into stu(name,sex,age) values(‘张家辉’,’男’,23);

insert into stu(name,sex,age) values(‘张汇美’,’女’,85);

insert into stu(name,sex,age) values(‘张铁林’,’男’,35);

 

 

5.2、查询数据

select 语句常用来依照早晚的询问规则到数据库中获取数据, 其基本的用法为:

select 字段名 from 表名称 [询问条件];

查询学生表中的具有音信:select * from students;

查询学生表中兼有的name与age信息:select name, age from students;

也得以采纳通配符 * 查询表中所有的内容, 语句: select * from students;

 

#1、添加多少

 

insert into stu(name,sex,age) values(‘张学友’,’男’,18);

insert into stu(name,sex,age) values(‘张娜拉’,’女’,73);

insert into stu(name,sex,age) values(‘张家辉’,’男’,23);

insert into stu(name,sex,age) values(‘张汇美’,’女’,85);

insert into stu(name,sex,age) values(‘张铁林’,’男’,35);

 

insert into stu(name,sex,age) values(‘张国立’,’男’,99);

 

#2、查询数据

 

#2.1、查询所有学生

select id,name,sex,age from stu;

 

#2.2、查询年龄领先80岁女学员

select id,name,sex,age from stu where age>80 and sex=’女’;

 

表明式与原则查询

 

where 关键词用于指定询问条件, 用法格局为: select 列名称 from 表名称
where 条件;

以询问所有性别为女的音信为例, 输入查询语句: select * from students
where sex=”女”;

where 子句不仅仅匡助 “where 列名 = 值” 这种名等于值的询问模式,
对一般的相比较运算的运算符都是永葆的, 例如 =、>、<、>=、<、!=
以及部分恢宏运算符 is [not] null、in、like 等等。 还是可以对查询条件使用
or 和 and 举行重组查询, 将来还会学到更加高档的规则查询办法,
这里不再多做牵线。

示例:

询问年龄在21岁以上的所有人音讯: select * from students where age >
21;

查询名字中含有 “王” 字的所有人音信: select * from students where name
like “%王%”;

查询id小于5且年纪大于20的所有人音信: select * from students where
id<5 and age>20;

聚合函数

 

收获学生总人数:select count(*) from students

得到学生平均分:select avg(mark) from students

赢得最高成绩:select max(mark) from students

收获最低战表:select min(mark) from students

得到学生总战表:select sum(mark) from students

剔除数据

delete from 表名 [去除条件];

除去表中所有数据:delete from students;

删除id为10的行: delete from students where id=10;

删除所有年龄小于88岁的数量: delete from students where age<88;

 

#1、添加数量—–

 

insert into stu(name,sex,age) values(‘张学友’,’男’,18);

insert into stu(name,sex,age) values(‘张娜拉’,’女’,73);

insert into stu(name,sex,age) values(‘张家辉’,’男’,23);

insert into stu(name,sex,age) values(‘张汇美’,’女’,85);

insert into stu(name,sex,age) values(‘张铁林’,’男’,35);

insert into stu(name,sex,age) values(‘张国立’,’男’,99);

 

#2、查询数据—–

 

#2.1、查询所有学生

select id,name,sex,age from stu;

 

#2.2、查询年龄领先80岁女学员

select id,name,sex,age from stu where age>80 and sex=’女’;

 

#2.3、查询平均年龄

select AVG(age) from stu where sex=’女’;

 

#3、修改数据—–

#3.1、将号码为1的学生年龄加大1岁

update stu set age=age+1 where id=1;

 

#3.2、将80岁以上的女学童年龄修改为90岁且将人名后扩充“老人”

#CONCAT(str1,str2,…) 连接字符串

update stu set age=90,name=CONCAT(name,'(老人)’) where
age>=80 and sex=’女’;

 

#3.3、将编号4的学生名字修改为张汇美

update stu set name=’张汇美’ where id=4;

 

#4、删除数据—–

#4.1、删除年龄大于70岁的学习者

delete from stu where age>70;

 

#4.2、删除所有学员

delete from stu;

 

 

立异数据

update 语句可用来修改表中的数据, 基本的使用形式为:

update 表名称 set 列名称=新值 where 更新标准;

Update 表名 set 字段=值 列表 更新标准

行使示例:

将id为5的手机号改为默认的”-“: update students set tel=default where
id=5;

将所有人的年纪扩充1: update students set age=age+1;

将手机号为 13723887766 的全名改为 “张果”, 年龄改为 19: update students
set name=”张果”, age=19 where tel=”13723887766″;

修改表

alter table 语句用于创建后对表的改动, 基础用法如下:

添加列

主干形式: alter table 表名 add 列名 列数据类型 [after 插入地点];

示例:

在表的终极追加列 address: alter table students add address char(60);

在名为 age 的列后安插列 birthday: alter table students add birthday date
after age;

修改列

主干形式: alter table 表名 change 列名称 列新名称 新数据类型;

示例:

将表 tel 列改名为 phone: alter table students change tel phone char(12)
default “-“;

将 name 列的数据类型改为 char(9): alter table students change name name
char(9) not null;

删除列

主干形式: alter table 表名 drop 列名称;

示例:

删除 age 列: alter table students drop age;

重命名表

基本形式: alter table 表名 rename 新表名;

示例:

重命名 students 表为temp: alter table students rename temp;

删除表

着力格局: drop table 表名;

示例: 删除students表: drop table students;

删除数据库

主干情势: drop database 数据库名;

示例: 删除lcoa数据库: drop database lcoa;

一千行MySQL笔记

 

/* 启动MySQL */

net start mysql

 

/* 连接与断开服务器 */

mysql -h 地址 -P 端口 -u 用户名 -p 密码

 

/* 跳过权力验证登录MySQL */

mysqld –skip-grant-tables

— 修改root密码

密码加密函数password()

update mysql.user set password=password(‘root’);

 

SHOW PROCESSLIST — 显示怎么线程正在运行

SHOW VARIABLES —

 

/* 数据库操作 */ ——————

— 查看当前数据库

    select database();

— 显示当前时光、用户名、数据库版本

    select now(), user(), version();

— 创建库

    create database[ if not exists] 数据库名 数据库选项

    数据库选项:

        CHARACTER SET charset_name

        COLLATE collation_name

— 查看已有库

    show databases[ like ‘pattern’]

— 查看当前库消息

    show create database 数据库名

— 修改库的选项信息

    alter database 库名 选项信息

— 删除库

    drop database[ if exists] 数据库名

        同时删除该数据库相关的目录及其目录内容

 

/* 表的操作 */ ——————

— 创建表

    create [temporary] table[ if not exists] [库名.]表名 (
表的结构定义 )[ 表选项]

        每个字段必须有数据类型

        最终一个字段后无法有逗号

        temporary 临时表,会话截至时表自动消失

        对于字段的定义:

            字段名 数据类型 [NOT NULL | NULL] [DEFAULT
default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY]
KEY] [COMMENT ‘string’]

— 表选项

    — 字符集

        CHARSET = charset_name

        假使表没有设定,则运用数据库字符集

    — 存储引擎

        ENGINE = engine_name   

       
表在治本数据时选用的不比的数据结构,结构不同会招致处理形式、提供的特性操作等不同

        常见的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV
马克斯DB Archive

        不同的发动机在保存表的协会和多少时行使不同的艺术

        MyISAM表文件含义:.frm表定义,.MYD表数据,.MYI表索引

        InnoDB表文件含义:.frm表定义,表空间数据和日志文件

        SHOW ENGINES — 呈现存储引擎的情景音讯

        SHOW ENGINE 引擎名 {LOGS|STATUS} — 突显存储引擎的日记或气象音信

    — 数据文件目录

        DATA DIRECTORY = ‘目录’

    — 索引文件目录

        INDEX DIRECTORY = ‘目录’

    — 表注释

        COMMENT = ‘string’

    — 分区选项

        PARTITION BY … (详细见手册)

— 查看所有表

    SHOW TABLES[ LIKE ‘pattern’]

    SHOW TABLES FROM 表名

— 查看表机构

    SHOW CREATE TABLE 表名    (新闻更详实)

    DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名
[LIKE ‘PATTERN’]

    SHOW TABLE STATUS [FROM db_name] [LIKE ‘pattern’]

— 修改表

    — 修改表本身的拔取

        ALTER TABLE 表名 表的取舍

        EG:    ALTER TABLE 表名 ENGINE=MYISAM;

    — 对表举行重命名

        RENAME TABLE 原表名 TO 新表名

        RENAME TABLE 原表名 TO 库名.表名    (可将表移动到另一个数据库)

        — RENAME可以换成五个表名

    — 修改表的字段机构

        ALTER TABLE 表名 操作名

        — 操作名

            ADD[ COLUMN] 字段名        — 扩充字段

                AFTER 字段名            — 表示扩展在该字段名后边

                FIRST                — 表示增添在第一个

            ADD PRIMARY KEY(字段名)    — 创设主键

            ADD UNIQUE [索引名] (字段名)– 创立唯一索引

            ADD INDEX [索引名] (字段名)    — 创造普通索引

            ADD

            DROP[ COLUMN] 字段名        — 删除字段

            MODIFY[ COLUMN] 字段名 字段属性        —
帮助对字段属性举行改动,无法改改字段名(所有原有属性也需写上)

            CHANGE[ COLUMN] 原字段名 新字段名 字段属性        —
襄助对字段名修改

            DROP PRIMARY KEY    —
删除主键(删除主键前需删除其AUTO_INCREMENT属性)

            DROP INDEX 索引名    — 删除索引

            DROP FOREIGN KEY 外键    — 删除外键

 

— 删除表

    DROP TABLE[ IF EXISTS] 表名 …

— 清空表数据

    TRUNCATE [TABLE] 表名

— 复制表结构

    CREATE TABLE 表名 LIKE 要复制的表名

— 复制表结构和多少

    CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名

— 检查表是否有荒唐

    CHECK TABLE tbl_name [, tbl_name] … [option] …

— 优化表

    OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [,
tbl_name] …

— 修复表

    REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [,
tbl_name] … [QUICK] [EXTENDED] [USE_FRM]

— 分析表

    ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [,
tbl_name] …

 

 

 

/* 数据操作 */ ——————

— 增

    INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表),
…]

        —
倘若要插入的值列表包含所有字段并且逐一一致,则足以省略字段列表。

        — 可同时插入多条数据记录!

        REPLACE 与 INSERT 完全一样,可交流。

    INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, …]

— 查

    SELECT 字段列表 FROM 表名[ 其他子句]

        — 可来自五个表的三个字段

        — 其他子句可以不使用

        — 字段列表可以用*代表,表示所有字段

— 删

    DELETE FROM 表名[ 删除条件子句]

        没有原则子句,则会去除所有

— 改

    UPDATE 表名 SET 字段名=新值[, 字段名=新值] [履新标准]

 

/* 字符集编码 */ ——————

— MySQL、数据库、表、字段均可安装编码

— 数据编码与客户端编码不需一致

SHOW VARIABLES LIKE ‘character_set_%’    — 查看所有字符集编码项

    character_set_client        客户端向服务器发送数据时接纳的编码

    character_set_results       
服务器端将结果回到给客户端所采纳的编码

    character_set_connection    连接层编码

SET 变量名 = 变量值

    set character_set_client = gbk;

    set character_set_results = gbk;

    set character_set_connection = gbk;

SET NAMES GBK;    — 约等于完成上述五个设置

— 校对集

    校对集用以排序

    SHOW CHARACTER SET [LIKE ‘pattern’]/SHOW CHARSET [LIKE
‘pattern’]    查看所有字符集

    SHOW COLLATION [LIKE ‘pattern’]        查看所有校对集

    charset 字符集编码        设置字符集编码

    collate 校对集编码        设置校对集编码

 

/* 数据类型(列类型) */ ——————

1. 数值类型

— a. 整型 ———-

    类型            字节        范围(有记号位)

    tinyint        1字节    –128 ~ 127        无符号位:0 ~
255

    smallint    2字节    –32768 ~ 32767

    mediumint    3字节    –8388608 ~ 8388607

    int            4字节

    bigint        8字节

 

    int(M)    M表示总位数

    – 默认存在符号位,unsigned 属性修改

    –
显示涨幅,如若某个数不够定义字段时设置的位数,则后面以0补填,zerofill
属性修改

        例:int(5)    插入一个数’123’,补填后为’00123′

    – 在知足要求的状况下,越小越好。

    –
1代表bool值真,0代表bool值假。MySQL没有布尔类型,通过整型0和1意味着。常用tinyint(1)表示布尔型。

 

— b. 浮点型 ———-

    类型                字节        范围

    float(单精度)        4字节

    double(双精度)    8字节

    浮点型既协助符号位 unsigned 属性,也援助显得涨幅 zerofill 属性。

        不同于整型,前后均会补填0.

    定义浮点型时,需点名总位数和小数位数。

        float(M, D)        double(M, D)

        M代表总位数,D表示小数位数。

        M和D的大小会决定浮点数的限定。不同于整型的定位范围。

       
M既意味着总位数(不包括小数点和正负号),也表示显示涨幅(所有显示符号均包括)。

        协理科学计数法表示。

        浮点数表示近似值。

 

— c. 定点数 ———-

    decimal    — 可变长度

    decimal(M, D)    M也意味着总位数,D表示小数位数。

    保存一个确切的数值,不会生出多少的变动,不同于浮点数的四舍五入。

    将浮点数转换为字符串来保存,每9位数字保存为4个字节。

 

2. 字符串类型

— a. char, varchar ———-

    char    定长字符串,速度快,但浪费空间

    varchar    变长字符串,速度慢,但节省空间

    M表示能储存的最大尺寸,此尺寸是字符数,非字节数。

    不同的编码,所占用的上空不同。

    char,最多255个字符,与编码无关。

    varchar,最多65535字符,与编码有关。

    一条有效记录最大不可能超越65535个字节。

        utf8 最大为21844个字符,gbk 最大为32766个字符,latin1
最大为65532个字符

    varchar 是变长的,需要运用存储空间保存 varchar
的长度,借使数额低于255个字节,则应用一个字节来保存长度,反之需要多少个字节来保存。

    varchar 的最大使得长度由最大行大小和应用的字符集确定。

   
最大使得长度是65532字节,因为在varchar存字符串时,第一个字节是空的,不存在其他数据,然后还需六个字节来存放在字符串的长度,所以有效长度是64432-12=65532字节。

    例:若一个表定义为 CREATE TABLE tb(c1 int, c2 char(30), c3
varchar(N)) charset=utf8; 问N的最大值是有些?
答:(6553512430*3)/3

 

— b. blob, text ———-

    blob 二进制字符串(字节字符串)

        tinyblob, blob, mediumblob, longblob

    text 非二进制字符串(字符字符串)

        tinytext, text, mediumtext, longtext

    text 在概念时,不需要定义长度,也不会统计总长度。

    text 类型在概念时,不可给default值

 

— c. binary, varbinary ———-

   
类似于char和varchar,用于保存二进制字符串,也就是保存字节字符串而非字符字符串。

    char, varchar, text 对应 binary, varbinary, blob.

 

3. 日期时间档次

    一般用整型保存时间戳,因为PHP可以很便利的将时间戳举办格式化。

    datetime    8字节    日期及时间        10000101
00:社会保险,00:0099991231 23:59:59

    date        3字节    日期            10000101
99991231

    timestamp    4字节    时间戳        19700101000000
20380119 03:14:07

    time        3字节    时间            –838:59:59
838:59:59

    year        1字节    年份            19012155

   

datetime    “YYYY-MM-DD hh:mm:ss”

timestamp    “YY-MM-DD hh:mm:ss”

            “YYYYMMDDhhmmss”

            “YYMMDDhhmmss”

            YYYYMMDDhhmmss

            YYMMDDhhmmss

date        “YYYY-MM-DD”

            “YY-MM-DD”

            “YYYYMMDD”

            “YYMMDD”

            YYYYMMDD

            YYMMDD

time        “hh:mm:ss”

            “hhmmss”

            hhmmss

year        “YYYY”

            “YY”

            YYYY

            YY

 

4. 枚举和集合

— 枚举(enum) ———-

enum(val1, val2, val3…)

    在已知的值中展开单选。最大数目为65535.

   
枚举值在保留时,以2个字节的整型(smallint)保存。每个枚举值,按保存的地方顺序,从1先河挨家挨户递增。

    表现为字符串类型,存储却是整型。

    NULL值的目录是NULL。

    空字符串错误值的索引值是0。

 

— 集合(set) ———-

set(val1, val2, val3…)

    create table tab ( gender set(‘男’, ‘女’, ‘无’) );

    insert into tab values (‘男, 女’);

   
最多可以有64个不同的成员。以bigint存储,共8个字节。选取位运算的款式。

    当创立表时,SET成员值的尾部空格将自动被剔除。

 

/* 采用连串 */

— PHP角度

1. 效率满意

2. 存储空间尽量小,处理效能更高

3. 考虑兼容问题

 

— IP存储 ———-

1. 只需贮存,可用字符串

2. 要是需统计,查找等,可存储为4个字节的无符号int,即unsigned

    1) PHP函数转换

       
ip2long可转换为整型,但会冒出指引符号问题。需格式化为无符号的整型。

        利用sprintf函数格式化字符串

        sprintf(“%u”, ip2long(‘192.168.3.134’));

        然后用long2ip将整型转回IP字符串

    2) MySQL函数转换(无符号整型,UNSIGNED)

        INET_ATON(‘127.0.0.1’) 将IP转为整型

        INET_NTOA(2130706433) 将整型转为IP

       

 

 

 

/* 列属性(列约束) */ ——————

1. 主键

    – 能唯一标识记录的字段,可以用作主键。

    – 一个表只能有一个主键。

    – 主键具有唯一性。

    – 阐明字段时,用 primary key 标识。

        也可以在字段列表之后阐明

            例:create table tab ( id int, stu varchar(10), primary
key (id));

    – 主键字段的值不可以为null。

    – 主键可以由三个字段共同整合。此时急需在字段列表后宣称的章程。

        例:create table tab ( id int, stu varchar(10), age int,
primary key (stu, age));

 

2. unique 唯一索引(唯一约束)

    使得某字段的值也无法重新。

   

3. null 约束

    null不是数据类型,是列的一个特性。

    表示目前列是否足以为null,表示什么都不曾。

    null, 允许为空。默认。

    not null, 不允许为空。

    insert into tab values (null, ‘val’);

        — 此时表示将首先个字段的值设为null, 取决于该字段是否同意为null

   

4. default 默认值属性

    当前字段的默认值。

    insert into tab values (default, ‘val’);    —
此时表示强制行使默认值。

    create table tab ( add_time timestamp default current_timestamp );

        — 表示将目前些天子的年月戳设为默认值。

        current_date, current_time

 

5. auto_increment 自动增长约束

    自动增长必须为索引(主键或unique)

    只好存在一个字段为自发性增长。

    默认为1起来自行增长。可以因而表属性 auto_increment = x举行设置,或
alter table tbl auto_increment = x;

 

6. comment 注释

    例:create table tab ( id int ) comment ‘注释内容’;

 

7. foreign key 外键约束

    用于限制主表与从表数据完整性。

    alter table t1 add constraint `t1_t2_fk` foreign key (t1_id)
references t2(id);

        — 将表t1的t1_id外键关联到表t2的id字段。

        — 每个外键都有一个名字,可以透过 constraint 指定

 

    存在外键的表,称之为从表(子表),外键指向的表,称之为主表(父表)。

 

   
效用:保持数据一致性,完整性,重要目标是控制存储在外键表(从表)中的数据。

 

    MySQL中,可以对InnoDB引擎使用外键约束:

    语法:

    foreign key (外键字段) references 主表名 (关联字段)
[主表记录删除时的动作] [主表记录更新时的动作]

   
此时亟待检测一个从表的外键需要约束为主表的已存在的值。外键在没有涉及的气象下,可以安装为null.前提是该外键列,没有not
null。

 

    可以不点名主表记录更改或更新时的动作,那么此时主表的操作被拒绝。

    固然指定了 on update 或 on
delete:在剔除或更新时,有如下多少个操作可以选用:

    1.
cascade,级联操作。主表数据被更新(主键值更新),从表也被更新(外键值更新)。主表记录被删去,从表相关记录也被删除。

    2. set
null,设置为null。主表数据被更新(主键值更新),从表的外键被安装为null。主表记录被剔除,从表相关记录外键被装置成null。但注意,要求该外键列,没有not
null属性约束。

    3. restrict,拒绝父表删除和翻新。

 

    注意,外键只被InnoDB存储引擎所支撑。其他发动机是不协助的。

 

 

/* 建表规范 */ ——————

    — Normal Format, NF

        – 每个表保存一个实体音讯

        – 每个拥有一个ID字段作为主键

        – ID主键 + 原子表

    — 1NF, 第一范式

        字段不可以再分,就满足第一范式。

    — 2NF, 第二范式

        满足第一范式的前提下,不可能冒出有的依赖。

        消除符合主键就可以防止有些依赖。扩张单列关键字。

    — 3NF, 第三范式

        满意第二范式的前提下,不能够冒出传递依赖。

        某个字段看重于主键,而有其他字段依赖于该字段。这就是传递依赖。

        将一个实体音讯的数额放在一个表内实现。

 

 

/* select */ ——————

 

select [all|distinct] select_expr from -> where -> group by
[协议函数] -> having -> order by -> limit

 

a. select_expr

    — 可以用 * 表示拥有字段。

        select * from tb;

    — 可以运用表明式(总计公式、函数调用、字段也是个表明式)

        select stu, 29+25, now() from tb;

    — 可以为各类列使用别名。适用于简化列标识,防止三个列标识符重复。

        – 使用 as 关键字,也可省略 as.

        select stu+10 as add10 from tb;

 

b. from 子句

    用于标识查询来源。

    — 可以为表起别名。使用as关键字。

        select * from tb1 as tt, tb2 as bb;

    — from子句后,可以而且出现六个表。

        — 三个表会横向叠加到共同,而数据会形成一个笛卡尔(Carl)积。

        select * from tb1, tb2;

 

c. where 子句

    — 从from拿到的数据源中举行筛选。

    — 整型1表示真,0表示假。

    — 表明式由运算符和运算数组成。

        — 运算数:变量(字段)、值、函数重临值

        — 运算符:

            =, <=>, <>, !=, <=, <, >=, >, !, &&,
||,

            in (not) null, (not) like, (not) in, (not) between and, is
(not), and, or, not, xor

            is/is not 加上ture/false/unknown,检验某个值的真伪

            <=>与<>效用雷同,<=>可用以null相比较

 

d. group by 子句, 分组子句

    group by 字段/别名 [排序情势]

    分组后会实行排序。升序:ASC,降序:DESC

   

    以下[协和函数]需配合 group by 使用:

    count 重临不同的非NULL值数目    count(*)、count(字段)

    sum 求和

    max 求最大值

    min 求最小值

    avg 求平均值

    group_concat
重返带有来自一个组的连天的非NULL值的字符串结果。组内字符串连接。

 

e. having 子句,条件子句

    与 where 效用、用法相同,执行时机不比。

    where 在先导时进行检测数据,对原数据开展过滤。

    having 对筛选出的结果再行展开过滤。

    having 字段必须是询问出来的,where 字段必须是数据表存在的。

    where 不可以应用字段的别名,having
可以。因为执行WHERE代码时,可能没有规定列值。

    where 不可以运用协议函数。一般需用合计函数才会用 having

    SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。

 

f. order by 子句,排序子句

    order by 排序字段/别名 排序模式 [,排序字段/别名 排序模式]…

    升序:ASC,降序:DESC

    扶助六个字段的排序。

 

g. limit 子句,限制结果数量子句

   
仅对处理好的结果开展数据限制。将拍卖好的结果的作为是一个聚众,遵照记录出现的次第,索引从0开端。

    limit 着手地方, 获取条数

    省略第一个参数,表示从索引0起首。limit 获取条数

 

h. distinct, all 选项

    distinct 去除重复记录

    默认为 all, 全体记下

 

 

/* UNION */ ——————

    将七个select查询的结果组合成一个结果集合。

    SELECT … UNION [ALL|DISTINCT] SELECT …

    默认 DISTINCT 格局,即所有重回的行都是绝无仅有的

    建议,对各样SELECT查询加上小括号包裹。

    ORDER BY 排序时,需加上 LIMIT 举行组合。

    需要各select查询的字段数量同样。

   
每个select查询的字段列表(数量、类型)应平等,因为结果中的字段名以第一条select语句为准。

 

 

/* 子查询 */ ——————

    – 子查询需用括号包裹。

— from型

    from后要求是一个表,必须给子查询结果取个别名。

    – 简化每个查询内的条件。

    – from型需将结果生成一个暂时表格,可用以原表的锁定的放飞。

    – 子查询重返一个表,表型子查询。

    select * from (select * from tb where id>0) as subfrom
where id>1;

— where型

    – 子查询再次来到一个值,标量子查询。

    – 不需要给子查询取别名。

    – where子查询内的表,不可能一向用来更新。

    select * from tb where money = (select max(money) from tb);

    — 列子查询

        如果实查询结果回到的是一列。

        使用 in 或 not in 完成查询

        exists 和 not exists 条件

            假诺实查询重临数据,则赶回1或0。常用来判断标准。

            select column1 from t1 where exists (select * from t2);

    — 行子查询

        查询条件是一个行。

        select * from t1 where (id, gender) in (select id, gender from
t2);

        行构造符:(col1, col2, …) 或 ROW(col1, col2, …)

        行构造符常常用于与对能回去多少个或五个以上列的子查询举办相比较。

 

    — 特殊运算符

    != all()    相当于 not in

    = some()    相当于 in。any 是 some 的别名

    != some()    不一样 not in,不对等其中某一个。

    all, some 可以匹配其他运算符一起使用。

 

 

/* 连接查询(join) */ ——————

    将三个表的字段举行连续,可以指定连接条件。

— 内连接(inner join)

    – 默认就是内连接,可省略inner。

    – 唯有数量存在时才能发送连接。即连续结果无法出现空行。

    on
表示连接条件。其规范表明式与where类似。也足以简简单单条件(表示原则永远为真)

    也可用where表示连接条件。

    还有 using, 但需字段名相同。 using(字段名)

 

    — 交叉连接 cross join

        即,没有条件的内连续。

        select * from tb1 cross join tb2;

— 外连接(outer join)

    – 若是数额不存在,也会出现在一连结果中。

    — 左外连接 left join

        假使数据不存在,左表记录会出现,而右表为null填充

    — 右外接连 right join

        假使数量不设有,右表记录会出现,而左表为null填充

— 自然连接(natural join)

    自动判断连接条件形成连接。

    相当于简单了using,会活动搜索相同字段名。

    natural join

    natural left join

    natural right join

 

select info.id, info.name, info.stu_num, extra_info.hobby,
extra_info.sex from info, extra_info where info.stu_num =
extra_info.stu_id;

 

/* 导入导出 */ ——————

select * into outfile 文件地方 [支配格式] from 表名;    — 导出表数据

load data [local] infile 文件地方 [replace|ignore] into table 表名
[支配格式];    — 导入数据

    生成的多少默认的相间符是制表符

    local未指定,则数据文件必须在服务器上

    replace 和 ignore 关键词控制对现有的唯一键记录的再一次的处理

— 控制格式

fields    控制字段格式

默认:fields terminated by ‘\t’ enclosed by ” escaped by ‘\\’

    terminated by ‘string’    — 终止

    enclosed by ‘char’        — 包裹

    escaped by ‘char’        — 转义

    — 示例:

        SELECT a,b,a+b INTO OUTFILE ‘/tmp/result.text’

        FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘”‘

        LINES TERMINATED BY ‘\n’

        FROM test_table;

lines    控制行格式

默认:lines terminated by ‘\n’

    terminated by ‘string’    — 终止

   

/* insert */ ——————

select语句得到的数目可以用insert插入。

 

可以大概对列的指定,要求 values ()括号内,提供给了如约列顺序出现的具有字段的值。

    或者应用set语法。

    insert into tbl_name set field=value,…;

 

可以一遍性使用多少个值,选择(), (), ();的样式。

    insert into tbl_name values (), (), ();

 

可以在列值指定时,使用表明式。

    insert into tbl_name values (field_value, 10+10, now());

可以使用一个出奇值 default,表示该列使用默认值。

    insert into tbl_name values (field_value, default);

 

可以由此一个询问的结果,作为需要插入的值。

    insert into tbl_name select …;

 

可以指定在插入的值出现主键(或唯一索引)龃龉时,更新任何非主键列的音讯。

    insert into tbl_name values/set/select on duplicate key update
字段=值, …;

 

/* delete */ ——————

DELETE FROM tbl_name [WHERE where_definition] [ORDER BY …]
[LIMIT row_count]

 

听从规范删除

 

点名删除的最多记录数。Limit

 

可以通过排序条件删除。order by + limit

 

匡助多表删除,使用类似连接语法。

delete from 需要删除数据多表1,表2 using 表连接操作 条件。

 

/* truncate */ ——————

TRUNCATE [TABLE] tbl_name

清空数据

删去重建表

 

区别:

1,truncate 是剔除表再创制,delete 是逐条删除

2,truncate 重置auto_increment的值。而delete不会

3,truncate 不领会删除了几条,而delete知道。

4,当被用于带分区的表时,truncate 会保留分区

 

 

/* 备份与还原 */ ——————

备份,将数据的构造与表内数据保存起来。

拔取 mysqldump 指令完成。

 

— 导出

1. 导出一张表

  mysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql)

2. 导出多张表

  mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)

3. 导出所有表

  mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)

4. 导出一个库

  mysqldump -u用户名 -p密码 -B 库名 > 文件名(D:/a.sql)

 

可以-w辅导备份条件

 

— 导入

1. 在签到mysql的情景下:

  source  备份文件

2. 在不记名的动静下

  mysql -u用户名 -p密码 库名 < 备份文件

 

 

/* 视图 */ ——————

什么样是视图:

   
视图是一个虚拟表,其情节由询问定义。同实际的表一样,视图包含一层层涵盖名称的列和行数据。不过,视图并不在数据库中以存储的数据值集形式存在。行和列数据出自由定义视图的询问所引用的表,并且在引用视图时动态变化。

    视图具有表结构文件,但不设有数据文件。

   
对内部所引述的根基表来说,视图的效劳类似于筛选。定义视图的筛选可以来自当前或任何数据库的一个或两个表,或者其他视图。通过视图举行查询没有此外限制,通过它们举行数据修改时的限定也很少。

   
视图是储存在数据库中的查询的sql语句,它最紧假如因为二种原因:安全原因,视图可以隐蔽一些多少,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一缘故是可使复杂的查询易于明白和应用。

 

— 创制视图

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)] AS select_statement

    – 视图名必须唯一,同时不可能与表重名。

    – 视图可以拔取select语句询问到的列名,也得以友善指定相应的列名。

    – 可以指定视图执行的算法,通过ALGORITHM指定。

    – column_list假如存在,则数目必须等于SELECT语句检索的列数

 

— 查看结构

    SHOW CREATE VIEW view_name

 

— 删除视图

    – 删除视图后,数据依旧存在。

    – 可同时删除五个视图。

    DROP VIEW [IF EXISTS] view_name …

 

— 修改视图结构

    – 一般不改动视图,因为不是拥有的更新视图都会炫耀到表上。

    ALTER VIEW view_name [(column_list)] AS select_statement

 

— 视图功能

    1. 简化作业逻辑

    2. 对客户端隐藏真实的表结构

 

— 视图算法(ALGORITHM)

    MERGE        合并

        将视图的查询语句,与外部查询需要先统一再履行!

    TEMPTABLE    临时表

        将视图执行完毕后,形成临时表,再做外层查询!

    UNDEFINED    未定义(默认),指的是MySQL自主去采纳相应的算法。

 

 

 

/* 事务(transaction) */ ——————

业务是指逻辑上的一组操作,组成这组操作的相继单元,要不全成功要不全战败。

    – 辅助连续SQL的公共成功或公共收回。

    – 事务是数据库在数据晚自习方面的一个意义。

    – 需要采纳 InnoDB 或 BDB 存储引擎,对自动提交的特征帮忙完成。

    – InnoDB被喻为事务安全型引擎。

 

— 事务开启

    START TRANSACTION; 或者 BEGIN;

    开启事务后,所有被实践的SQL语句均被认作当前工作内的SQL语句。

— 事务提交

    COMMIT;

— 事务回滚

    ROLLBACK;

    假如有的操作暴发问题,映射到事情开启前。

 

— 事务的表征

    1. 原子性(Atomicity)

       
事务是一个不可分割的行事单位,事务中的操作仍旧都暴发,要么都不暴发。

    2. 一致性(Consistency)

        事务前后数据的完整性必须保持一致。

        – 事务开始和了结时,外部数据一致

        – 在方方面面业务进程中,操作是接二连三的

    3. 隔离性(Isolation)

       
两个用户并发访问数据库时,一个用户的政工不可以被此外用户的东西所困扰,三个冒出事务之间的数量要相互隔离。

    4. 持久性(Durability)

        一个作业一旦被交付,它对数据库中的数据变动就是永久性的。

 

— 事务的兑现

    1. 要求是事情补助的表类型

    2. 执行一组有关的操作前开启事务

    3.
整组操作完成后,都成功,则交给;假如存在破产,选取回滚,则会回来事情起首的备份点。

 

— 事务的法则

    利用InnoDB的自动提交(autocommit)特性成就。

    普通的MySQL执行语句后,当前的数据提交操作均可被其他客户端可见。

    而工作是暂时关张“自动提交”机制,需要commit提交持久化数据操作。

 

— 注意

    1.
数据定义语言(DDL)语句不可能被回滚,比如创制或裁撤数据库的言语,和开创、撤除或更改表或存储的子程序的言辞。

    2. 事务不可以被嵌套

 

— 保存点

    SAVEPOINT 保存点名称 — 设置一个工作保存点

    ROLLBACK TO SAVEPOINT 保存点名称 — 回滚到保存点

    RELEASE SAVEPOINT 保存点名称 — 删除保存点

 

— InnoDB自动提交特性设置

    SET autocommit = 0|1;   
0表示关闭自动提交,1象征开启自动提交。

    –
假如关闭了,这平时操作的结果对另外客户端也不可见,需要commit提交后才能持久化数据操作。

    – 也得以关闭自动提交来开启事务。但与START TRANSACTION不同的是,

        SET
autocommit是恒久改变服务器的设置,直到下次重新修改该装置。(针对当前连连)

        而START
TRANSACTION记录开启前的景观,而一旦事情提交或回滚后就需要再行开启事务。(针对最近工作)

 

 

/* 锁表 */

表锁定只用于避免其他客户端举办不正当地读取和写入

MyISAM 协助表锁,InnoDB 协助行锁

— 锁定

    LOCK TABLES tbl_name [AS alias]

— 解锁

    UNLOCK TABLES

 

 

/* 触发器 */ ——————

   
触发程序是与表有关的命名数据库对象,当该表出现一定事件时,将激活该对象

    监听:记录的加码、修改、删除。

 

— 创制触发器

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name
FOR EACH ROW trigger_stmt

    参数:

    trigger_time是触发程序的动作时间。它可以是 before 或
after,以指明触发程序是在激活它的说话以前或未来触发。

    trigger_event指明了激活触发程序的话语的序列

        INSERT:将新行插入表时激活触发程序

        UPDATE:更改某一行时激活触发程序

        DELETE:从表中删除某一行时激活触发程序

   
tbl_name:监听的表,必须是永久性的表,不可能将触及程序与TEMPORARY表或视图关联起来。

   
trigger_stmt:当接触程序激活时实施的话语。执行五个语句,可利用BEGIN…END复合语句结构

 

— 删除

DROP TRIGGER [schema_name.]trigger_name

 

可以利用old和new代替旧的和新的数量

    更新操作,更新前是old,更新后是new.

    删除操作,只有old.

    扩展操作,唯有new.

 

— 注意

    1.
对于拥有同样触发程序动作时间和事件的给定表,不可以有五个触发程序。

 

 

— 字符连接函数

concat(str1[, str2,…])

 

— 分支语句

if 条件 then

    执行语句

elseif 条件 then

    执行语句

else

    执行语句

end if;

 

— 修改最外层语句结束符

delimiter 自定义截止符号

    SQL语句

自定义截至符号

 

delimiter ;        — 修改回原来的分行

 

— 语句块包裹

begin

    语句块

end

 

— 特殊的履行

1. 只要添加记录,就会接触程序。

2. Insert into on duplicate key update 语法会触发:

    假若没有重复记录,会触发 before insert, after insert;

    假设有重复记录并立异,会触发 before insert, before update, after
update;

    假若有重复记录不过没有暴发更新,则触发 before insert, before update

3. Replace 语法 假诺有记录,则实施 before insert, before delete,
after delete, after insert

 

 

/* SQL编程 */ ——————

 

–// 局部变量 ———-

— 变量讲明

    declare var_name[,…] type [default value]

   
这么些讲话被用来声称局部变量。要给变量提供一个默认值,请包含一个default子句。值可以被指定为一个表明式,不需要为一个常数。假诺没有default子句,开头值为null。

 

— 赋值

    使用 set 和 select into 语句为变量赋值。

 

    – 注意:在函数内是足以行使全局变量(用户自定义的变量)

 

 

–// 全局变量 ———-

— 定义、赋值

set 语句可以定义并为变量赋值。

set @var = value;

也得以采纳select
into语句为变量初步化并赋值。这样要求select语句只可以回去一行,可是足以是两个字段,就象征同时为多少个变量举办赋值,变量的数额需要与查询的列数一致。

仍是可以够把赋值语句看作一个表明式,通过select执行到位。此时为了避免=被看作关系运算符看待,使用:=代替。(set语句可以行使=
和 :=)。

select @var:=20;

select @v1:=id, @v2=name from t1 limit 1;

select * from tbl_name where @var:=30;

 

select into 可以将表中询问得到的数据赋给变量。

    -| select max(height) into @max_height from tb;

 

— 自定义变量名

为了防止select语句中,用户自定义的变量与系统标识符(平日是字段名)争辩,用户自定义变量在变量名前使用@作为起始符号。

@var=10;

 

    – 变量被定义后,在整整会话周期都使得(登录到退出)

 

 

–// 控制结构 ———-

— if语句

if search_condition then

    statement_list   

[elseif search_condition then

    statement_list]

[else

    statement_list]

end if;

 

— case语句

CASE value WHEN [compare-value] THEN result

[WHEN [compare-value] THEN result …]

[ELSE result]

END

 

 

— while循环

[begin_label:] while search_condition do

    statement_list

end while [end_label];

 

– 假若急需在循环内提前终止
while循环,则需要动用标签;标签需要成对出现。

 

    — 退出循环

        退出整个循环 leave

        退出当前循环 iterate

        通过退出的价签决定退出哪个循环

 

 

–// 内置函数 ———-

— 数值函数

abs(x)            — 绝对值 abs(-10.9) = 10

format(x, d)    — 格式化千分位数值 format(1234567.456, 2) =
1,234,567.46

ceil(x)            — 向上取整 ceil(10.1) = 11

floor(x)        — 向下取整 floor (10.1) = 10

round(x)        — 四舍五入去整

mod(m, n)        — m%n m mod n 求余 10%3=1

pi()            — 拿到圆周率

pow(m, n)        — m^n

sqrt(x)            — 算术平方根

rand()            — 随机数

truncate(x, d)    — 截取d位小数

 

— 时间日期函数

now(), current_timestamp();     — 当前天期时间

current_date();                    — 当先天期

current_time();                    — 当前岁月

date(‘yyyy-mm-dd hh:ii:ss’);    — 获取日期部分

time(‘yyyy-mm-dd hh:ii:ss’);    — 获取时间有些

date_format(‘yyyy-mm-dd hh:ii:ss’, ‘%d %y %a %d %m %b %j’);    —
格式化时间

unix_timestamp();                — 获得unix时间戳

from_unixtime();                — 从岁月戳得到时间

 

— 字符串函数

length(string)            — string长度,字节

char_length(string)        — string的字符个数

substring(str, position [,length])        —
从str的position开始,取length个字符

replace(str ,search_str ,replace_str)    —
在str中用replace_str替换search_str

instr(string ,substring)    — 重回substring第一次在string中冒出的地方

concat(string [,…])    — 连接字串

charset(str)            — 再次回到字串字符集

lcase(string)            — 转换成小写

left(string, length)    — 从string2中的左侧起取length个字符

load_file(file_name)    — 从文件读取内容

locate(substring, string [,start_position])    —
同instr,但可指定先导地方

lpad(string, length, pad)    —
重复用pad加在string起头,直到字串长度为length

ltrim(string)            — 去除前端空格

repeat(string, count)    — 重复count次

rpad(string, length, pad)    –在str后用pad补充,直到长度为length

rtrim(string)            — 去除后端空格

strcmp(string1 ,string2)    — 逐字符相比两字串大小

 

— 流程函数

case when [condition] then result [when [condition] then result
…] [else result] end   多分支

if(expr1,expr2,expr3)  双分支。

 

— 聚合函数

count()

sum();

max();

min();

avg();

group_concat()

 

— 其他常用函数

md5();

default();

 

 

–// 存储函数,自定义函数 ———-

— 新建

    CREATE FUNCTION function_name (参数列表) RETURNS 再次来到值类型

        函数体

 

    – 函数名,应该合法的标识符,并且不应有与已有的根本字争辨。

    –
一个函数应该属于某个数据库,能够使用db_name.funciton_name的花样举办当前函数所属数据库,否则为当下数据库。

    – 参数部分,由”参数名”和”参数类型”组成。六个参数用逗号隔开。

    – 函数体由多条可用的mysql语句,流程控制,变量表明等语句构成。

    – 多条语句应该使用 begin…end 语句块包含。

    – 一定要有 return 再次来到值语句。

 

— 删除

    DROP FUNCTION [IF EXISTS] function_name;

 

— 查看

    SHOW FUNCTION STATUS LIKE ‘partten’

    SHOW CREATE FUNCTION function_name;

 

— 修改

    ALTER FUNCTION function_name 函数选项

 

 

–// 存储过程,自定义效率 ———-

— 定义

仓储存储过程 是一段代码(过程),存储在数据库中的sql组成。

一个囤积过程一般用于完成一段工作逻辑,例如报名,交班费,订单入库等。

而一个函数平常专注与某个意义,视为其他程序服务的,需要在其它语句中调用函数才可以,而存储过程无法被此外调用,是上下一心执行
通过call执行。

 

— 创建

CREATE PROCEDURE sp_name (参数列表)

    过程体

 

参数列表:不同于函数的参数列表,需要指明参数类型

IN,表示输入型

OUT,表示输出型

INOUT,表示混合型

 

专注,没有重返值。

 

 

/* 存储过程 */ ——————

积存过程是一段可执行性代码的聚众。相比较函数,更偏向于事情逻辑。

调用:CALL 过程名

— 注意

– 没有重返值。

– 只好独立调用,不可混同在其他语句中

 

— 参数

IN|OUT|INOUT 参数名 数据类型

IN        输入:在调用过程中,将数据输入到过程体内部的参数

OUT        输出:在调用过程中,将过程体处理完的结果回到到客户端

INOUT    输入输出:既可输入,也可输出

 

— 语法

CREATE PROCEDURE 过程名 (参数列表)

BEGIN

    过程体

END

 

 

/* 用户和权力管理 */ ——————

用户音信表:mysql.user

— 刷新权限

FLUSH PRIVILEGES

— 增添用户

CREATE USER 用户名 IDENTIFIED BY [PASSWORD] 密码(字符串)

    – 必须有所mysql数据库的大局CREATE USER权限,或有所INSERT权限。

    – 只好创制用户,不可能给予权力。

    – 用户名,注意引号:如 ‘user_name’@’192.168.1.1’

    – 密码也需引号,纯数字密码也要加引号

    –
要在纯文本中指定密码,需忽略PASSWORD关键词。要把密码指定为由PASSWORD()函数再次来到的混编值,需蕴涵关键字PASSWORD

— 重命名用户

RENAME USER old_user TO new_user

— 设置密码

SET PASSWORD = PASSWORD(‘密码’)    — 为当前用户设置密码

SET PASSWORD FOR 用户名 = PASSWORD(‘密码’)    — 为指定用户安装密码

— 删除用户

DROP USER 用户名

— 分配权限/添加用户

GRANT 权限列表 ON 表名 TO 用户名 [IDENTIFIED BY [PASSWORD]
‘password’]

    – all privileges 代表所有权限

    – *.* 表示所有库的所有表

    – 库名.表名 表示某库下边的某表

— 查看权限

SHOW GRANTS FOR 用户名

    — 查看当前用户权限

    SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR
CURRENT_USER();

— 撤废权限

REVOKE 权限列表 ON 表名 FROM 用户名

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用户名    — 撤除所有权限

— 权限层级

— 要使用GRANT或REVOKE,您必须具有GRANT
OPTION权限,并且您必须用于您正在授予或注销的权能。

全局层级:全局权限适用于一个加以服务器中的所有数据库,mysql.user

    GRANT ALL ON *.*和 REVOKE ALL ON *.*只授予和注销全局权限。

数据库层级:数据库权限适用于一个加以数据库中的所有目的,mysql.db,
mysql.host

    GRANT ALL ON db_name.*和REVOKE ALL ON
db_name.*只授予和注销数据库权限。

表层级:表权限适用于一个给定表中的所有列,mysql.talbes_priv

    GRANT ALL ON db_name.tbl_name和REVOKE ALL ON
db_name.tbl_name只授予和撤消表权限。

列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv

    当使用REVOKE时,您必须指定与被授权列相同的列。

— 权限列表

ALL [PRIVILEGES]    — 设置除GRANT OPTION之外的拥有简单权限

ALTER    — 允许行使ALTER TABLE

ALTER ROUTINE    — 更改或吊销已囤积的子程序

CREATE    — 允许利用CREATE TABLE

CREATE ROUTINE    — 创建已囤积的子程序

CREATE TEMPORARY TABLES        — 允许利用CREATE TEMPORARY TABLE

CREATE USER        — 允许接纳CREATE USER, DROP USER, RENAME
USER和REVOKE ALL PRIVILEGES。

CREATE VIEW        — 允许利用CREATE VIEW

DELETE    — 允许拔取DELETE

DROP    — 允许使用DROP TABLE

EXECUTE        — 允许用户运行已囤积的子程序

FILE    — 允许使用SELECT…INTO OUTFILE和LOAD DATA INFILE

INDEX     — 允许利用CREATE INDEX和DROP INDEX

INSERT    — 允许接纳INSERT

LOCK TABLES        — 允许对您有所SELECT权限的表使用LOCK TABLES

PROCESS     — 允许选取SHOW FULL PROCESSLIST

REFERENCES    — 未被实践

RELOAD    — 允许行使FLUSH

REPLICATION CLIENT    — 允许用户驾驭从属服务器或主服务器的地点

REPLICATION SLAVE    —
用于复制型从属服务器(从主服务器中读取二进制日志事件)

SELECT    — 允许利用SELECT

SHOW DATABASES    — 彰显所有数据库

SHOW VIEW    — 允许使用SHOW CREATE VIEW

SHUTDOWN    — 允许利用mysqladmin shutdown

SUPER    — 允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET
GLOBAL语句,mysqladmin
debug命令;允许你连接(一遍),即便已达到max_connections。

UPDATE    — 同意拔取UPDATE

USAGE    — “无权力”的同义词

GRANT OPTION    — 允许授予权限

 

 

/* 表维护 */

— 分析和存储表的机要字分布

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE 表名 …

— 检查一个或四个表是否有错误

CHECK TABLE tbl_name [, tbl_name] … [option] …

option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}

— 整理数据文件的零碎

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [,
tbl_name] …

 

 

/* 杂项 */ ——————

1.
可用反引号(`)为标识符(库名、表名、字段名、索引、别名)包裹,以制止与根本字重名!中文也得以当作标识符!

2. 每个库目录存在一个保存当前数据库的选项文件db.opt。

3. 注释:

    单行注释 # 注释内容

    多行注释 /* 注释内容 */

    单行注释 — 注释内容       
(标准SQL注释风格,要求双破折号后加一空格符(空格、TAB、换行等))

4. 情势通配符:

    _    任意单个字符

    %    任意五个字符,甚至包括零字符

    单引号需要举行转义 \’

  1. CMD命令行内的话语停止符可以为 “;”, “\G”,
    “\g”,仅影响展现结果。其他地点依然用分号截至。delimiter
    可修改当前对话的说话停止符。

  2. SQL对大小写不敏感

  3. 裁撤已有语句:\c

 

5.5.8、常用的SQL

 

/*==============================================================*/

/* DBMS name:      MySQL 5.0                                    */

/* Created on:     2017/3/5 10:29:05                            */

/*==============================================================*/

 

 

drop table if exists Address;

 

drop table if exists ArticleComment;

 

drop table if exists ArticleType;

 

drop table if exists Articles;

 

drop table if exists DictSub;

 

drop table if exists DictTop;

 

drop table if exists OrderPdt;

 

drop table if exists Orders;

 

drop table if exists ProductComment;

 

drop table if exists Products;

 

drop table if exists Users;

 

/*==============================================================*/

/* Table: Address                                               */

/*==============================================================*/

create table Address

(

   `AddressId` int not null auto_increment comment ‘收货地址编号’,

   `UserId` int not null comment ‘用户号码’,

   `Province` varchar(50) not null comment ‘省’,

   `City` varchar(50) not null comment ‘市’,

   `County` varchar(50) not null comment ‘县/区’,

   `Street` varchar(300) not null comment ‘详细地址’,

   `RevName` varchar(30) not null comment ‘收货人姓名’,

   `PostCode` varchar(20) comment ‘邮政编码’,

   `Mobile` varchar(50) not null comment ‘手机’,

   `Phone` varchar(50) comment ‘电话’,

   `IsDefault` bool comment ‘是否为默认地址’,

   primary key (AddressId)

);

 

alter table Address comment ‘收货地址’;

 

/*==============================================================*/

/* Table: ArticleComment                                        */

/*==============================================================*/

create table ArticleComment

(

   `ArticleCommentId` int not null auto_increment comment
‘小说评价编号’,

   `ArticleId` int not null comment ‘作品编号’,

   `UserId` int not null comment ‘用户号码’,

   `ArticleCommentContent` varchar(4000) not null comment
‘著作评论内容’,

   `ArticleCommentDate` timestamp default CURRENT_TIMESTAMP comment
‘作品评价时间’,

   `ArticleCommentState` int default 1 comment ‘状态’,

   `ArticleRemark` int comment ‘打分’,

   `ArticleCommentReserver1` varchar(4000) comment ‘备用1’,

   `ArticleCommentReserver2` varchar(4000) comment ‘备用2’,

   primary key (ArticleCommentId)

);

 

alter table ArticleComment comment ‘作品评价’;

 

/*==============================================================*/

/* Table: ArticleType                                           */

/*==============================================================*/

create table ArticleType

(

   `ArticleTypeId` int not null auto_increment comment
‘作品栏目编号’,

   `ArticleTypeName` varchar(200) comment ‘著作栏目名称’,

   `ArticleTypeState` int default 1 comment ‘状态’,

   `ArticleTypeDesc` varchar(4000) comment ‘文章栏目描述’,

   `ArticleTypePicture` varchar(400) comment ‘小说栏目图片’,

   `ArticleTypeReserve1` varchar(4000) comment ‘备用1’,

   `ArticleTypeReserve2` varchar(4000) comment ‘备用2’,

   primary key (ArticleTypeId)

);

 

alter table ArticleType comment ‘作品栏目’;

 

/*==============================================================*/

/* Table: Articles                                              */

/*==============================================================*/

create table Articles

(

   `ArticleId` int not null auto_increment comment ‘小说编号’,

   `ArticleTypeId` int not null comment ‘小说栏目编号’,

   `ArticleTitle` varchar(400) not null comment ‘随笔标题’,

   `ArticleContent` text comment ‘小说内容’,

   `ArticleDate` timestamp default CURRENT_TIMESTAMP comment
‘著作发表时间’,

   `ArticleAuthor` varchar(200) comment ‘小说宣布者’,

   `ArticleFileName` varchar(100) comment ‘静态文件名’,

   `ArticleThumbNail` varchar(200) comment ‘缩略图片’,

   `ArticleAddition` varchar(200) comment ‘附件名称’,

   `ArticleLevel` int comment ‘呈现的事先级’,

   `ArticleIsAllowComment` integer default 1 comment
‘是否同意评论’,

   `ArticleState` int default 1 comment ‘状态’,

   `ArticleHotCount` int comment ‘点击次数’,

   `ArticleReserve1` varchar(4000) comment ‘备用1’,

   `ArticleReserve2` varchar(4000) comment ‘备用2’,

   `ArticleReserve3` numeric(8,0) comment ‘备用3’,

   primary key (ArticleId)

);

 

alter table Articles comment ‘文章’;

 

/*==============================================================*/

/* Table: DictSub                                               */

/*==============================================================*/

create table DictSub

(

   `SubId` int not null auto_increment comment ‘子项编号’,

   `DictId` int not null comment ‘字典编号’,

   `SubName` varchar(200) not null comment ‘子项名称’,

   `SubDesc` varchar(4000) comment ‘子项描述’,

   `SubReserve1` varchar(4000) comment ‘保留备用1’,

   primary key (SubId)

);

 

alter table DictSub comment ‘字典子项’;

 

/*==============================================================*/

/* Table: DictTop                                               */

/*==============================================================*/

create table DictTop

(

   `DictId` int not null auto_increment comment ‘字典编号’,

   `DictName` varchar(100) not null comment ‘字典名称’,

   `DictDesc` varchar(4000) comment ‘字典描述’,

   `DictReserve1` varchar(4000) comment ‘保留备用’,

   primary key (DictId)

);

 

alter table DictTop comment ‘字典’;

 

/*==============================================================*/

/* Table: OrderPdt                                              */

/*==============================================================*/

create table OrderPdt

(

   `OrderPdtId` int not null auto_increment comment ‘订单商品编号’,

   `Id` int not null comment ‘编号’,

   `UserId` int not null comment ‘用户号码’,

   `OrderId` int comment ‘订单号’,

   `PdtAmount` int comment ‘订购数量’,

   `PdtPrice` decimal comment ‘单价’,

   `PdtReserve1` varchar(2000) comment ‘备用1’,

   `PdtReserve2` varchar(4000) comment ‘备用2’,

   primary key (OrderPdtId)

);

 

alter table OrderPdt comment ‘订单商品’;

 

/*==============================================================*/

/* Table: Orders                                                */

/*==============================================================*/

create table Orders

(

   `OrderId` int not null auto_increment comment ‘订单号’,

   `AddressId` int not null comment ‘收货地址编号’,

   `OrderState` int default 1 comment ‘订单状态’,

   `ExpressNO` varchar(50) comment ‘快递编号’,

   `ExpressName` varchar(50) comment ‘快递名称’,

   `PayMoney` decimal comment ‘应支付’,

   `PayedMoney` decimal comment ‘已支付’,

   `SendInfo` varchar(300) comment ‘发货人消息’,

   `BuyDate` timestamp default CURRENT_TIMESTAMP comment ‘下单时间’,

   `PayDate` datetime comment ‘支付时间’,

   `SendDate` datetime comment ‘发货时间’,

   `ReceivDate` datetime comment ‘收货时间’,

   `OrderMessage` varchar(4000) comment ‘附言’,

   `UserId` integer comment ‘用户号码’,

   `OrderReserve1` varchar(4000) comment ‘备用1’,

   `OrderReserve2` varchar(4000) comment ‘备用2’,

   `OrderReserve3` decimal comment ‘备用3’,

   primary key (OrderId)

);

 

alter table Orders comment ‘订单’;

 

/*==============================================================*/

/* Table: ProductComment                                        */

/*==============================================================*/

create table ProductComment

(

   `ProductCommentId` int not null auto_increment comment
‘商品评论编号’,

   `ProductId` int not null comment ‘商品编号’,

   `UserId` int not null comment ‘用户号码’,

   `ProductCommentContent` varchar(4000) comment ‘商品评论内容’,

   `ProductCommentDate` timestamp default CURRENT_TIMESTAMP comment
‘商品评论时间’,

   `ProductCommentState` int comment ‘状态’,

   `ProductCommentRemark` int comment ‘打分’,

   `ProductCommentReserve1` varchar(4000) comment ‘备用1’,

   `ProductCommentReserve2` varchar(4000) comment ‘备用2’,

   primary key (ProductCommentId)

);

 

alter table ProductComment comment ‘商品评论’;

 

/*==============================================================*/

/* Table: Products                                              */

/*==============================================================*/

create table Products

(

   `Id` int not null auto_increment comment ‘编号’,

   `Name` varchar(200) not null comment ‘名称’,

   `SubIdColor` int not null comment ‘所属颜色’,

   `SubIdBrand` int not null comment ‘所属品牌’,

   `SubIdInlay` int not null comment ‘所属镶嵌’,

   `SubIdMoral` int not null comment ‘所属寓意’,

   `SubIdMaterial` int not null comment ‘所属种水’,

   `SubIdTopLevel` int not null comment ‘顶尖分类编号’,

   `MarketPrice` decimal comment ‘市场参考价’,

   `MyPrice` decimal not null comment ‘玉源直销价’,

   `Discount` decimal default 1 comment ‘折扣’,

   `Picture` varchar(200) comment ‘图片’,

   `Amount` int comment ‘库存量’,

   `Description` text comment ‘详细描述’,

   `State` int default 1 comment ‘状态’,

   `AddDate` timestamp default CURRENT_TIMESTAMP comment ‘上货日期’,

   `Hang` int comment ‘挂件’,

   `RawStone` int comment ‘赌石’,

   `Size` varchar(200) comment ‘尺寸’,

   `ExpressageName` varchar(100) comment ‘快递名称’,

   `Expressage` decimal comment ‘快递费’,

   `AllowComment` int default 1 comment ‘是否同意评论’,

   `Reserve1` varchar(4000) comment ‘保留备用1’,

   `Reserve2` varchar(4000) comment ‘保留备用2’,

   `Reserve3` decimal(0) comment ‘保留备用3’,

   primary key (Id)

);

 

alter table Products comment ‘商品’;

 

/*==============================================================*/

/* Table: Users                                                 */

/*==============================================================*/

create table Users

(

   `UserId` int not null auto_increment comment ‘用户号码’,

   `UserName` varchar(200) not null comment ‘用户名’,

   `Password` varchar(512) not null comment ‘密码’,

   `Email` varchar(100) not null comment ‘邮箱’,

   `Sex` varchar(10) comment ‘性别’,

   `State` int default 1 comment ‘状态’,

   `RightCode` int comment ‘权限状态’,

   `RegDate` timestamp default CURRENT_TIMESTAMP comment ‘注册时间’,

   `RegIP` varchar(200) comment ‘注册IP’,

   `LastLoginDate` datetime comment ‘如今登录时间’,

   `UserReserve1` varchar(4000) comment ‘保留备用1’,

   `UserReserve2` varchar(4000) comment ‘保留备用2’,

   `UserReserve3` varchar(4000) comment ‘保留备用3’,

   primary key (UserId)

);

 

alter table Users comment ‘用户’;

 

alter table Address add constraint FK_AddressBelongUser foreign key
(UserId)

      references Users (UserId) on delete restrict on update restrict;

 

alter table ArticleComment add constraint FK_ArticleCommentForArticle
foreign key (ArticleId)

      references Articles (ArticleId) on delete restrict on update
restrict;

 

alter table ArticleComment add constraint FK_ArticleCommentForUser
foreign key (UserId)

      references Users (UserId) on delete restrict on update restrict;

 

alter table Articles add constraint FK_ArticleBelongType foreign key
(ArticleTypeId)

      references ArticleType (ArticleTypeId) on delete restrict on
update restrict;

 

alter table DictSub add constraint FK_BelongDict foreign key (DictId)

      references DictTop (DictId) on delete cascade on update cascade;

 

alter table OrderPdt add constraint FK_BelongOrder foreign key
(OrderId)

      references Orders (OrderId) on delete cascade on update cascade;

 

alter table OrderPdt add constraint FK_CartForUser foreign key (UserId)

      references Users (UserId) on delete restrict on update restrict;

 

alter table OrderPdt add constraint FK_OrderDepProduct foreign key (Id)

      references Products (Id) on delete restrict on update restrict;

 

alter table Orders add constraint FK_OrderBelongAddress foreign key
(AddressId)

      references Address (AddressId) on delete restrict on update
restrict;

 

alter table ProductComment add constraint FK_ProductCommentBelongUsers
foreign key (UserId)

      references Users (UserId) on delete restrict on update restrict;

 

alter table ProductComment add constraint FK_ProductCommentForProduct
foreign key (ProductId)

      references Products (Id) on delete restrict on update restrict;

 

alter table Products add constraint FK_BelongBrand foreign key
(SubIdMaterial)

      references DictSub (SubId) on delete restrict on update restrict;

 

alter table Products add constraint FK_BelongColor foreign key
(SubIdBrand)

      references DictSub (SubId) on delete restrict on update restrict;

 

alter table Products add constraint FK_BelongInlay foreign key
(SubIdInlay)

      references DictSub (SubId) on delete restrict on update restrict;

 

alter table Products add constraint FK_BelongMaterial foreign key
(SubIdColor)

      references DictSub (SubId) on delete restrict on update restrict;

 

alter table Products add constraint FK_BelongMoral foreign key
(SubIdTopLevel)

      references DictSub (SubId) on delete restrict on update restrict;

 

alter table Products add constraint FK_BelongTopLevel foreign key
(SubIdMoral)

      references DictSub (SubId) on delete restrict on update restrict;

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注