SQL ServerMySQL基本语法(一):和SQL Server语法的异样小汇总

本文目录:
1. 及SQL
server语法主要不同之地方
  1.1
大小写敏感性
  1.2
注释符
  1.3
自增列
  1.4
查看表的习性
  1.5
修改表名
  1.6
删除表
  1.7
修改字段属性
  1.8
添加、删除字段和束缚
  1.9
创建表模板
  1.10
MySQL中之字段显示涨幅与zerofill
2.
数据类型
3.
数据类型属性
  3.1
unsigned
  3.2
zerofill
4.
操作符
  4.1
安全等运算符(<=>)
  4.2
正则表达式运算符(regexp或者rlike)
  4.3
连接操作符
  4.4
异或运算符XOR
  4.5
MySQL中之转义

因一早就接触了SQL Server,所以本着sql
server的语法比较熟悉,后来转学mysql,还生头未适应,所以大致总结了有的mysql和sql
server语法不同之地方,其中借鉴了把此文面临的内容。

为本文是SQL
server和mysql语法差异性的总结,所以情比较杂,没什么逻辑吗非详细,还请见谅。在后的篇章中将只说明MySQL的语法。

1. 暨SQL server语法主要不同的地方

1.1 大小写敏感性

MySQL和SQL
Server一样,对大小写不灵敏。但不同之是,在MySQL中对片靶的援是大小写敏感的,如数据库名、表名,但针对字段、索引、函数、存储过程等之援不灵活。

1.2 注释符

每当MySQL中支持三种注释方法:以下且足以是行内注释。

  1. 使用#当开头,后面的全都是注释。
  2. 使用--作为注释开头,但如若留意,MySQL中这种注释方法及SQL
    Server等其余标准数据库注释语法稍有差,MySQL要求第二单短线后面要和一个空白字符,如空格、制表符等。
  3. 使用/**/注释符。

1.3 自增列

MySQL中设置从增列(auto_increment)的排必须是发目录的排列,且创表时如果显式指定的种子值需要在建表语句之后。另外MySQL一张表只能发出一个自增列。而SQL
Server中可生差不多个自增列。且MySQL中向从增列插入数据常常得使null来代表插入的是打增列,除非显式指定插入列表中未含有自增列,而SQL
Server向于增列插入数据时得还要无视该列,除非设置显示插入模式。

-- SQL Server直接使用identity,但必须有非自增列之外的列才能插入,除非显式开启手动插入自增列
create table emp1(id int not null identity(1,2),name CHAR(20));
insert into emp1 VALUES('malongshuai');
insert into emp1 values('gaoxiaofang');
select * from emp1; 

-- MySQL中自增列必须为索引列,并且只能设置种子值而不能直接设置步长
create table emp1(id int not null primary key AUTO_INCREMENT);
create table emp2(id int not null primary key AUTO_INCREMENT) auto_increment=100;
insert into emp1 values(null);
insert into emp2 values(null);

安装从增列的增幅,分为全局级别与对话级别。但其还是临时生效之,重开实例后效果即使烟消云散,要永远生效可以用那状副配置文件被。如果是会见说话级别,那么当用户新建一个对话的时刻,那么步长又回了大局级别。

mysql不克设置为说明级别之大幅度!!

安装和查阅全局和对话级别之变量时,分别采用如下语句:

set [session] auto_increment_increment=100;  -- 会话级的步长设置
set global auto_increment_offset=12;         -- 全局级的种子值
show [session] variables like 'auto_inc%';
show global variables like 'auto_inc%';

当下点儿个变量都生session级和global级。其中auto_increment_offset项也起始计算项,auto_increment_increment项也宽度项。它们的拍卖模式和SQL
server的处理方式相差甚远。当以安装了马上片独变量时,如果offsert设置的值大于increment的值,则offset将受忽视,且MySQL会因为”offset+N\*increment”计算下同样长达插入的记录值。例如,”offset=3、increment=5″,当前说明底末梢一个自增列值为13,则生同样长插入的从增值也18,因为”offset+N\*increment”将计得到[3,8,13,18,23,28…]班,所以由序列中挑来逾且极其接近时最终一个值13底项,即18。

以上言论也法定手册及之讲(原文:the next value inserted is the
least value in the series that is greater than the maximum
existing value in the AUTO_INCREMENT
column),但实际并无专业,更标准的传教是:根据当下offset和increment计算增长序列,并从中挑来过或等原列的生一个值。例如地方offset=3,生成的行为[3,8,13,18,23…],下一个假如插入的值吗18,但插入之前如果以offset改呢4,则新的阵为[4,9,14,19,24],那么它用插19,而非是14,尽管14超当前最终一个记录值13。同理,如果拿offset改多少,例如设置也2,则序列为[2,7,12,17,22],那么下一个栽的价值将凡22。同理,修改increment也是均等计算的。

提问:如果生一致摆表,里面来个字段为id的自增主键,当已经向表里面插入了10长条数据后,删除了id为8、9、10的多寡,再将mysql重开,之后又插入一漫漫数,那么就长达数据的id值应该是多少,是8还是11?

报:是11。但是于老版本中,innodb存储引擎的表会是8,这是innodb的bug,在新生修复了,只是以mysql5.6遭受没了。

翻看时打增值的艺术:

show table status like "table_name_string";   -- 查看某个表的下一个自增值
select last_insert_id();   -- 查看当前环境下最后一次自增列的插入值

关于”last_insert_id”函数,在产一样篇稿子”内置函数”中再次做牵线。

1.4 查看表的属性

-- SQL Server使用存储过程sp_help
exec sp_help emp;

SQL Server 1

-- MySQL使用desc描述或者使用show
mysql> desc emp1;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+

mysql> show table status like 'emp1'\G
*************************** 1. row ***************************
           Name: emp1
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 1
 Avg_row_length: 16384
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: 2
    Create_time: 2017-03-22 10:05:49
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)

1.5 修改表名

-- SQL Server使用存储过程sp_rename
EXEC sp_rename emp,emp2 [object]

-- mysql使用alter语句中的rename功能
alter table emp rename [to] emp3;

1.6 删除表

当去表方面,MySQL比SQL Server要便宜多,判断起来呢有益于广大。

-- SQL Server删除表,每次只能删除一张表
if object_id('table_name') is not null drop table table_name;
if exists(select object_id('table_name')) drop table table_name;

-- MySQL可以直接判断,且一次可以删除多表
drop table if exists table_name1,table_name2...

1.7 修改字段属性

-- SQL Server只能修改字段属性(数据类型、空性),不能修改约束类属性,
-- 约束类属性需要使用"alter table … add constraint"
alter table emp2 alter column id int not null;
alter table emp2 add gender char(2);
alter table emp2 add CONSTRAINT def_key DEFAULT('男') FOR gender;
alter table emp2 add constraint pk_key primary key clustered(id);

-- mysql修改字段属性有几种方法
alter table table_name 
| ALTER [COLUMN] col_name {SET DEFAULT string | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name new_col_name column_definition
      [FIRST|AFTER col_name]
| MODIFY [COLUMN] col_name column_definition
      [FIRST | AFTER col_name]

也就是说,change和modify都可改列的概念,包括约束类的性质、字段的职务,且change比modify更多一个重命名列的意义。而alter
column则只能设置默认值和去默认值。注意,重命名暨修改字段经常,需要再行定义字段属性。

1.8 添加、删除字段和约束

先是用说明的是,MySQL中另外存储引擎都不支持check约束,官方手册及说明了会面针对check语句进行读取检查,但是非会见收效,也就是是就是对的check约束为是为忽略的。要当MySQL中贯彻check约束好考虑下触发器或者经数据类来限制。

-- MySQL中添加、删除字段和约束的语法

-- 添加字段
| ADD [COLUMN] col_name column_definition
      [FIRST | AFTER col_name ]
| ADD [COLUMN] (col_name column_definition,...)  -- 可以一次性添加多个字段
-- 删除字段
| DROP [COLUMN] col_name
-- 添加约束
| ADD [CONSTRAINT [symbol]] PRIMARY KEY
    [index_type] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)
      reference_definition
| ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name]
      [index_type] (index_col_name,...) [index_option] ...
-- 删除约束
| DROP PRIMARY KEY
| DROP FOREIGN KEY fk_symbol
| DROP {INDEX|KEY} index_name
| DISABLE KEYS
| ENABLE KEYS
-- 添加和删除默认值约束
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

于MariaDB,从10.2.1初步,其绷DROP
CONSTRAINT子句,并引入了DEFAULT约束,还支持check约束。且当MariaDB
10.0.2本子后,操作字段时还支持if exists和if not
exists。包括如下情况:

ADD COLUMN       [IF NOT EXISTS]
ADD INDEX        [IF NOT EXISTS]
ADD FOREIGN KEY  [IF NOT EXISTS]
ADD PARTITION    [IF NOT EXISTS]
CREATE INDEX     [IF NOT EXISTS]

DROP COLUMN      [IF EXISTS]
DROP INDEX       [IF EXISTS]
DROP FOREIGN KEY [IF EXISTS]
DROP PARTITION   [IF EXISTS]
CHANGE COLUMN    [IF EXISTS]
MODIFY COLUMN    [IF EXISTS]
DROP INDEX       [IF EXISTS]

对于SQL
Server,不管是呀约束,都能应用下的言语进行去,但MySQL有把麻烦,见下文具体说明:

alter table table_name drop constraint constraint_name
  1. 增长/删除字段

    -- SQL Server添加字段,只能一个字段一个字段添加
    alter table emp add name char(20)
    -- MySQL添加字段,可以一次添加一个字段,也可以一次添加多个字段
    ALTER TABLE emp ADD NAME CHAR(20) NOT NULL;
    ALTER TABLE emp ADD (gender CHAR(6) NOT NULL DEFAULT 'male',phone CHAR(11));
    
  2. 增长/删除主键、外键约束

    /*添加主键约束*/
    -- SQL Server
    alter table emp10 add constraint pk_id primary key clustered(id);
    -- MySQL添加主键
    ALTER TABLE emp10 ADD CONSTRAINT pk_id PRIMARY KEY (id);
    -- 添加外键约束,SQL Server和MySQL相同
    ALTER TABLE emp10 ADD CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES emp20(id);
    -- MySQL删除主键、外键(需要先删除外键)
    alter table emp10 drop foreign key fk_id;
    alter table emp10 drop primary key;
    

    MySQL在外键上以及SQL
    Server以及Oracle都不同,MySQL在创立外键的时节,会活动在外键列上创办一个索引,且是目录无法人工删除。在表联接的历程中坐见面拄的对外表加上锁,如果外键列上没有索引,可能会见增长表锁降低并发且容易导致死锁,如果产生目录,将会见进展限锁定,增强并发性也回落了死锁的面世几乎率领。在就或多或少达到,MySQL比SQL
    Server做的亲善。

  3. 添加唯一性约束

    --SQL Server
    alter table emp10 add constraint uni_name unique nonclustered(name);
    -- MySQL添加唯一性约束
    ALTER TABLE emp10 ADD CONSTRAINT uni_name UNIQUE KEY(`name`);
    -- MySQL删除唯一性约束
    alter table emp10 drop key uni_name
    
  4. 默认值的设置方法
    SQL
    Server的默认值约束与MySQL的默认值约束设置法去大要命,MySQL的默认值约束不可知动用constraint来装,只能通过修改列属性来安装。另外,MySQL的default关键字后是匪克加括号的,而SQL
    Server是无所谓的。

    -- SQL Server设置默认值时可有可没有括号
    create table emp10(name int not null default(12));
    create table emp10(name int not null default 12);
    alter table emp10 add constraint def_name default 12 for name;
    -- MySQL设置默认值时不能使用括号
    create table emp(id int not null default 12);
    alter table test.emp alter id set default 12;  /*使用change和modify也行,但是要重定义列属性*/
    -- MySQL删除默认值约束
    alter table test.emp alter id drop default;
    

1.9 创建表模板

-- SQL Server
select * into table_name1 from table_name2;             /*复制表结构和数据*/
select * into table_name1 from table_name2 where 1=0;   /*只复制表结构*/
-- MySQL
create table table_name1 like table_name2;              /*只复制表结构*/
create tbale table_name1 as select * from table_name2;  /*复制表结构和数据*/

MySQL中复制表结构时未见面复制主键、索引、自增列等其它性质,仅仅只是简单的建平等摆设表然后插入数据。但SQL
Server复制表结构时见面复制自增列属性。

1.10 MySQL中之字段显示涨幅与zerofill

以MySQL中好叫整数数据类型指定结果的显式宽度,如int(4)表示将展示4位整数,如果实际值的位数小于显示价值宽度,则以空格填充。而结果位数超出时以不影响著结果。一般该意义都见面配合zerofill属性用0代替空格填充,但是采取了zerofill后,该列就会自动成为无符号字段。

zerofill属性的扬言必须紧跟在整数数据类型的末尾,而不能够和在如not
null这样的性能后面。

SQL Server中尚无拖欠意义。

假定留意的是亮涨幅和数据类型限制的字段宽度是休同等的。显示涨幅不见面影响字段的界定宽度,只是从一个展示作用。

CREATE TABLE test3(id INT(2) ZEROFILL NOT NULL);
ALTER TABLE test3 MODIFY id INT(2) ZEROFILL NOT NULL;
ALTER TABLE test3 CHANGE id id INT(2) ZEROFILL NOT NULL;
INSERT INTO test3 VALUES(1),(2),(11),(111);
SELECT id FROM test3;
+-----+
| id  |
+-----+
|  01 |
|  02 |
|  11 |
| 111 |
+-----+
4 rows in set (0.00 sec)

2. 数据类型

数据类型的限定是依据bit位的数目值来算的。4字节的int占用32bit,所以可以象征的克为0-2^32。
SQL Server 2

数值在蕴藏(或调入内存)时,以数值型方式囤于字符型或日期时档次又省去空间。在整数值存储上,0-255期间的肆意整数都止占一个字节,256-65535间的任性整数都占有2单字节,而占据4只字节时虽足以表示几十亿独整数之间的擅自一个,这明明比字符型存储时每个字符占用一个字节节省空间的多。例如值”100″存储吗字符型时占用三独字节,而存储吗数值型将单纯占一个字节。因此数据库默认将不下引号包围的值当作数值型,如果明确而存储吗字符型或日期时型则应该用引号包围以避免歧义。

值          CHAR(4)    存储需求    VARCHAR(4)    存储需求
-----------------------------------------------------------
''          '    '     4个字节     ''            1个字节
'ab'        'ab  '     4个字节     'ab '         3个字节
'abcd'      'abcd'     4个字节     'abcd'        5个字节
'abcdefgh'  'abcd'     4个字节     'abcd'        5个字节

MySQL在找或操作char时会删除尾随空格,也就是说在where语句子被name='gaoxiaofang   'name='gaoxiaofang'的结果是千篇一律的;若name='gaoxiaofang   ',那么concat(name,'x')的结果将凡gaoxiaofangx

苟追寻或操作varchar时未见面去除尾随空格。但是char类型的排和varchar类型的排列进行比会忽视尾随空格,即
char:a=varchar:a

mysql> create table test(a char(10),b varchar(10));
mysql> insert into test select 'a   ','a   ';
mysql> select concat(a,'x'),concat(b,'x'),a=b from test;
+---------------+---------------+-----+
| concat(a,'x') | concat(b,'x') | a=b |
+---------------+---------------+-----+
| ax            | a   x         |   1 |
+---------------+---------------+-----+
1 row in set

有关char(M)以及varchar(M),其长是M个字符(MySQL早期版本是M字节),其配节数和字符集有关,例如latain1字符集下char(30)表示能积存30个字符也不怕是30单字节,而utf8字符集下char(30)只能存储30只字符(哪怕是英文字母),但该列将占30*3=90个字节的上空。

mysql> create table test9(a char(2) charset utf8mb4,b char(2)) charset=latain1;
mysql> insert into test9 values('我是','wo'),('wo','wo');
mysql> select length(a),char_length(a),length(b),char_length(b) from test9;
+-----------+----------------+-----------+----------------+
| length(a) | char_length(a) | length(b) | char_length(b) |
+-----------+----------------+-----------+----------------+
|         6 |              2 |         2 |              2 |
|         2 |              2 |         2 |              2 |
+-----------+----------------+-----------+----------------+
2 rows in set (0.00 sec)'

varchar(M)之字节数还同贮的字节数有关,每2^8不善方字节增加一许节结束符。

至于日期时之输入方式是好宽松的,以下几种方式都是受允许的:任意允许的分隔符,建议采用4员之年。

2011-01-01 18:40:20
2011/01/01 18-40-20
20110101184020

于ENUM,插入数据时疏忽大小写。如果enum列是允许NULL的,则NULL值也是起效值。

对此SET类型,和enum类似,不区分轻重缓急写,存储时去尾随空格,null也是发生效值。但不同的凡足以组合多个给闹底值。如set('a','b','c','d')好储存'a,b','d,b'抵,多个分子间利用逗号隔开。所以,使用多单分子的上,成员自身的值备受未可知起逗号。并且存储数据经常疏忽重复成员并仍枚举时的顺序存储,如set('d','b','a'),存储'a,b,a','b,a,b'的结果都是'b,a'。使用find_in_set(set_value,set_column_name)好寻找出含有指定set值set_value的行。

SELECT * FROM test6 WHERE FIND_IN_SET('d',col)>0;

3. 数据类型属性

3.1 unsigned

unsigned属性就是受数值类的数码易得无符号化。使用unsigned属性将会晤改数值数据类型的限量,例如tinyint类型带符号的限定是-128到127,而利用unsigned时限制以变成0到255。同时unsigned也会克该列不能够插入负数值。

create table t(a int unsigned,b int unsigned);
insert into t select 1,2;
insert into t select -1,-2;

面的言语中,在履行第二长达告词准备插负数时将会晤报错,提示超出范围。

采用unsigned在一些情况下真有该用意,例如一般的ID主键列非会见允许采取负数,它相当给贯彻了一个check约束。

唯独下unsigned有时候为会见并发数不可预期的问题:在进行数值运算时一旦获负数将会晤报错。例如地方的表t中,字段a和b都是无符号的排列,且产生同样行”a=1,b=2″。

mysql> select * from t;
+---+---+
| a | b |
+---+---+
| 1 | 2 |
+---+---+
1 row in set

此时只要算”a-b”将见面出错,不仅如此,只要是unsigned列参与计算并拿赢得负数都见面拧。

mysql> select a-b from t;
1690 - BIGINT UNSIGNED value is out of range in '(`test`.`t`.`a` - `test`.`t`.`b`)'
mysql> select a-2 from t;
1690 - BIGINT UNSIGNED value is out of range in '(`test`.`t`.`a` - 2)'

苟不是负数的结果用不见面发生震慑。

mysql> select 2-a,a*3 from t;
+-----+-----+
| 2-a | a*3 |
+-----+-----+
|   1 |   3 |
+-----+-----+
1 row in set

就并无是MySQL中之bug,在C语言中的unsigned也一致发生近似的题材。这个题材在MySQL中设置set sql_mode='no_unsigned_subtraction'即可解决。

3.2 zerofill

zerofill修饰字段后,不足字段显示有将使用0来顶替空格填充,启用zerofill后以活动设置unsigned。zerofill一般只是在装了排的亮涨幅后联合使用。关于列的显得涨幅在上文已经介绍过了。

mysql> create table t1(id int(4) zerofill);
mysql> select * from t1;
+-------+
| id    |
+-------+
|  0001 |
|  0002 |
|  0011 |
| 83838 |
+-------+
4 rows in set (0.00 sec)

zerofill只是修饰显示结果,不见面转存储的数据值。

4. 操作符

仅仅说明些SQL Server中尚无底运算符。详细内容见官方手册:函数和操作符。

4.1 安全等运算符(<=>)

本条标记和”=”进行相同的运算,但是它们基本上生之一个效果是可和NULL进行较。

当于的一定量边都是NULL时返回1一旦未是NULL,只出一面是null时回来回0而不是null,其余的时候与”=”的结果同样。

mysql> SELECT 1<=>NULL UNION ALL SELECT NULL<=>NULL UNION ALL SELECT 1=0 UNION ALL SELECT 1<=>0;
+----------+
| 1<=>NULL |
+----------+
|        0 |
|        1 |
|        0 |
|        0 |
+----------+
4 rows in set

4.2 正则表达式运算符(regexp或者rlike)

以SQL
Server中莫正则表达式运算符,而MySQL中生出。格式:expression regexp reg_pattern

若expression满足reg_pattern,则回1,无法配合成功则赶回回0。若expression或reg_pattern任意一着为null,则回null。

MySQL实现之是扩张正则表达式。

mysql> SELECT 'basskd' REGEXP '^b','basskd' REGEXP 's.k','basskd' REGEXP NULL,NULL REGEXP '^b';
+----------------------+-----------------------+----------------------+------------------+
| 'basskd' REGEXP '^b' | 'basskd' REGEXP 's.k' | 'basskd' REGEXP NULL | NULL REGEXP '^b' |
+----------------------+-----------------------+----------------------+------------------+
|                    1 |                     1 | NULL                 | NULL             |
+----------------------+-----------------------+----------------------+------------------+
1 row in set

4.3 连接操作符

当MySQL中,”+”不算是是相同种连接操作符。但是它的表达式是其它发含义之:它见面拿少止的表达式尝试换为数值型进行数值相加运算,如果换失败的虽意味着为0。

mysql> select '12'+'34',12+'34','abc'+12,'a'+'abc';
+-----------+---------+----------+-----------+
| '12'+'34' | 12+'34' | 'abc'+12 | 'a'+'abc' |
+-----------+---------+----------+-----------+
|        46 |      46 |       12 |         0 |
+-----------+---------+----------+-----------+
1 row in set

一旦真的落实字符串连接,需要采取函数concat,这个以在生同样篇稿子的置函数中介绍。

4.4 异或运算符XOR

异或运算符是用于比有限度值是否一律的。相同则归回0,不同则回1,如果存在null,则直返回null。

mysql> select 1 xor 1,0 xor 0,1 xor 0,1 xor null,null xor null;
+---------+---------+---------+------------+---------------+
| 1 xor 1 | 0 xor 0 | 1 xor 0 | 1 xor null | null xor null |
+---------+---------+---------+------------+---------------+
|       0 |       0 |       1 | NULL       | NULL          |
+---------+---------+---------+------------+---------------+
1 row in set

XOR运算符可以连续多次,顺序是以往为后挨家挨户展开演算。

mysql> select 1 xor 1 xor 0,1 xor 1 xor 1;
+---------------+---------------+
| 1 xor 1 xor 0 | 1 xor 1 xor 1 |
+---------------+---------------+
|             0 |             1 |
+---------------+---------------+
1 row in set

4.5 MySQL中的转义

在MySQL中或多或少符号需要以反斜杠”\”来转义。包括单引号(‘)、双引号(“)、反斜线(\)。

此外,如果目标名以了举足轻重字还是特殊符号,也得展开转义,如列名使用了int关键字,表名使用了char关键字等。但是此时底转义符号不是相反斜线,而是反引号“或引号。

一经于SQL Server中则未欲转义,有歧义的时段才待用引号即可。

mysql> INSERT INTO test7 VALUES('\\'),('\\\\'),('\'');
mysql> select * from test7;
+-----+
| col |
+-----+
| \   |
| \\  |
| '   |
+-----+
3 rows in set

对于目标名的转义,参考show create table table_name的结果即可见到,处处以了反引号防止歧义。例如:

mysql> show create table test7;
+-------+----------------------------------------------------------------------------+
| Table | Create Table                                                               |
+-------+----------------------------------------------------------------------------+
| test7 | CREATE TABLE `test7` (
  `col` char(6) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------+
1 row in set

 

回Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

回到数据库系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7586194.html

转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/7592501.html

流动:若您觉得这篇文章还不易请点击右侧下比赛推荐,您的支撑能刺激作者又特别的行文热情,非常感谢!

相关文章