数据库的大小写:我上网找了很多资料,许多人说数据库是不区分大小写的,也有的人说目前常用的Oracle数据库和MySQL数据库在运行时会自动将语句转变为大写形式执行,如果在大数据的应用领域上这一层转换会影响性能,所以书写SQL查询语句时应该养成习惯:关键字尽量使用大写,属性的名称可以使用小写。(博主使用SQL_server学习时发现SQL_server的关键字和属性名称是不区分大小写的)

 

创建存储过程

    • ##创建数据库

       CREATE DATABASE 数据库名 ON(
       NAME = 逻辑数据库名,
       FILENAME = '路径名.mdf'
       SIZE = 文件大小
       )
      ##删除数据库
       DROP DATABASE 数据库名
      
    • ##创建索引

       CREATE INDEX 索引名
       ON 表名(属性名)
      ##删除索引
       DROP INDEX 索引名                      ##Oracle中 
       ALTER TABLE 表名 DROP INDEX 索引名    ##My_SQL中
       DROP INDEX 表名.索引名                ##SQL_server中
      

 

图片 1

  这一篇主要介绍了SQL语句和数据库、表的增、删、改内容,目前比较流行的关系型数据库(如MySQL、Oracle、SQL_server、DB2)各自的查询语言标准大体上是相同的,但是某些数据库中有语法上的区别,这里不一一列出,在自己做实验、练习、开发中自然会遇到,到时候最好的解决方法就是谷歌。而且数据库是一门计算机科学,背后可以深挖的技术细节有很多,对于普通的学生和开发者基本不会考虑得到,只要知道最常用的语法和功能即可,遇到疑难杂症的最好办法依然是找谷歌。另外本篇中可能会暗藏不少错误,希望路过的同学能帮忙指正,共同学习。

 1 [root@zlm1 12:15:35 ~]
 2 #pt-slave-restart --recurse=1 --always -h192.168.56.101 -P3306 -urepl -prepl4slave
 3 *******************************************************************
 4  Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
 5  is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
 6  together with SSL_ca_file|SSL_ca_path for verification.
 7  If you really don't want to verify the certificate and keep the
 8  connection open to Man-In-The-Middle attacks please set
 9  SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
10 *******************************************************************
11   at /usr/bin/pt-slave-restart line 3841.
12 *******************************************************************
13  Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
14  is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
15  together with SSL_ca_file|SSL_ca_path for verification.
16  If you really don't want to verify the certificate and keep the
17  connection open to Man-In-The-Middle attacks please set
18  SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
19 *******************************************************************
20   at /usr/bin/pt-slave-restart line 3841.
21 
22 # A software update is available:
23 2018-07-21T12:18:15 P=3306,h=192.168.56.101,p=...,u=repl relay-bin.000030         407 0
24 
25 //It has begun to monitor the slave to automatically startup.

 图片 2

 

**Continue
to skip error 1050 on master.**

在ASP.NET里的GridView的控件里也提供了自动分页的功能,但它的处理过程是把数据源一次全部加载到网站上存储起来,并通过每页显示几条,

约束:约束包括空值约束、主键约束、外键约束、缺省值约束、CHECK值约束(是表的列对行的约束)。一般在创建或修改表时填在数据类型后的约束位置,一列可添加多个约束。

**Try to skip the error 1051 on
master.**

1.在数据库里创建一个sql分页的存储过成,这个可以通用,也日后做类似的,直接托用就行了

对表的基本操作:

 

现在小编给大家演示的是在数据库端实现分页,这样的话,每点下一页时都是从数据库加载出来的数据

设置外键:

1 [root@zlm1 13:35:31 ~]
2 #pt-slave-restart --recurse=0 --error-number=1050 -h192.168.56.101 -P3306 -urepl -prepl4slave
3 2018-07-21T13:39:43 P=3306,h=192.168.56.101,p=...,u=repl relay-bin.000032         618 1050 
4 2018-07-21T13:39:44 P=3306,h=192.168.56.101,p=...,u=repl relay-bin.000032         814 1068 
5 Error 1068 is not in --error-numbers.

sql语句为

  • INT:整数类型(4字节),适用于SQL_server、My_SQL
  • FLOAT:浮点数类型(4字节),适用于SQL_server、My_SQL
  • NUMBER(精度p,位数s):数值型,精度p表示总有效数字位数,位数s表示小数点后有效数字位数,适用于Qracle数据库
  • DECIMAL(精度p,位数s):数值型,精度p表示总有效数字位数,位数s表示小数点后有效数字位数,适用于Oracle、SQL_server、My_SQL数据库(其中在Oracle数据库中底层也是由NUMBER类型实现的,为了数据库可转移性推出的数据类型)
  • CHAR(长度n):固定长度字符串,该类型长度固定位n字节(My_SQL在某些版本用字符作单位,不必考虑汉子占用字节比较多的问题)
  • VARCHAR(长度n):可变长度字符串,该类型长度可变,最大为n字节(My_SQL在某些版本用字符作单位,不必考虑汉子占用字节比较多的问题;Oracle中有VARCHAR2使用字符作单位,不必考虑汉子占用字节比较多问题)
  • DATE:显示时间(年月日)
  • DATESTEMP:显示时间(年月日 时分秒)
  • NULL:表示未知,既不表示0也不表示不存在而是表示存在值但是未知。(某些约束中会禁止使用NULL)
 1 zlm@192.168.56.101:3306 [zlm]>show slave status\G
 2 *************************** 1. row ***************************
 3                Slave_IO_State: Waiting for master to send event
 4                   Master_Host: 192.168.56.100
 5                   Master_User: repl
 6                   Master_Port: 3306
 7                 Connect_Retry: 60
 8               Master_Log_File: mysql-bin.000091
 9           Read_Master_Log_Pos: 1241
10                Relay_Log_File: relay-bin.000032
11                 Relay_Log_Pos: 618
12         Relay_Master_Log_File: mysql-bin.000091
13              Slave_IO_Running: Yes
14             Slave_SQL_Running: No
15               Replicate_Do_DB: 
16           Replicate_Ignore_DB: 
17            Replicate_Do_Table: 
18        Replicate_Ignore_Table: 
19       Replicate_Wild_Do_Table: 
20   Replicate_Wild_Ignore_Table: 
21                    Last_Errno: 1050
22                    Last_Error: Error 'Table 'test' already exists' on query. Default database: 'zlm'. Query: 'create table test(
23 id int,
24 name varchar(10)
25 ) engine=innodb'
26                  Skip_Counter: 0
27           Exec_Master_Log_Pos: 405
28               Relay_Log_Space: 1908
29               Until_Condition: None
30                Until_Log_File: 
31                 Until_Log_Pos: 0
32            Master_SSL_Allowed: No
33            Master_SSL_CA_File: 
34            Master_SSL_CA_Path: 
35               Master_SSL_Cert: 
36             Master_SSL_Cipher: 
37                Master_SSL_Key: 
38         Seconds_Behind_Master: NULL
39 Master_SSL_Verify_Server_Cert: No
40                 Last_IO_Errno: 0
41                 Last_IO_Error: 
42                Last_SQL_Errno: 1050
43                Last_SQL_Error: Error 'Table 'test' already exists' on query. Default database: 'zlm'. Query: 'create table test(
44 id int,
45 name varchar(10)
46 ) engine=innodb'
47   Replicate_Ignore_Server_Ids: 
48              Master_Server_Id: 1003306
49                   Master_UUID: 2a4b3562-2ab6-11e8-be7a-080027de0e0e
50              Master_Info_File: /data/mysql/mysql3306/data/master.info
51                     SQL_Delay: 0
52           SQL_Remaining_Delay: NULL
53       Slave_SQL_Running_State: 
54            Master_Retry_Count: 86400
55                   Master_Bind: 
56       Last_IO_Error_Timestamp: 
57      Last_SQL_Error_Timestamp: 180721 13:35:31
58                Master_SSL_Crl: 
59            Master_SSL_Crlpath: 
60            Retrieved_Gtid_Set: 2a4b3562-2ab6-11e8-be7a-080027de0e0e:12715627-12715632
61             Executed_Gtid_Set: 27af30ca-6800-11e8-ad7e-080027de0e0e:1,
62 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715628
63                 Auto_Position: 1
64          Replicate_Rewrite_DB: 
65                  Channel_Name: 
66            Master_TLS_Version: 
67 1 row in set (0.00 sec)

改变一下指定页看一下效果

  • 空值约束:NULL和NOT NULL 指是否允许填入空值
  • 主键约束:设定某一行属性为主键
  • 外键约束:设定某一行属性为外键
  • 缺省值约束:为某一行设定缺省值
    •  DEFAULT 默认值 
    •  [time] DATE DEFAULT GETDATE()
      ##表示为time这个列添加一个缺省值为当前系统时间(GETDATE()是SQL内置的函数之一,讲查找时会讲) 
  • CHECK值约束:指定某一行的属性的数据应该满足某些条件
    •  CHECK 某属性满足的条件
    • ALTER TABLE t ADD CHECK (t_id>100 AND t_id<999 AND t_price>0) ##表示添加多个CHECK约束,使t_id在100到999之间取值;t_price取值至少比0大

Usage

以上就是数据库端制作的分页效果

  关于表中列属性的操作和数据库的操作基本是相同的,而且SQL查询语言实在是一种十分接近人类思维逻辑的语言,只要知道几个关键词的用法(CREATE、DROP、ALTER、ADD、INSERT
INTO、SET等),按照需要将属性、约束等填进去基本就是对的了,大部分的修改、添加、删除、查询命令都可以直接按照平时说话的逻辑组合。像我这等初学者也可以很快地掌握。

 

CREATE PROCEDURE sp_page --存储过程名

@strTable varchar(50), --表名 
@strColumn varchar(50), --按该列来进行分页 
@intColType int, --@strColumn列的类型,0-数字类型,1-字符类型,2-日期时间类型 
@intOrder bit, --排序,0-顺序,1-倒序 
@strColumnlist varchar(800), --要查询出的字段列表,*表示全部字段 
@intPageSize int, --每页记录数 
@intPageNum int, --指定页 
@strWhere varchar(800), --查询条件 
@intPageCount int OUTPUT --总页数 
AS 
DECLARE @sql nvarchar(4000) --用于构造SQL语句 
DECLARE @where1 varchar(800) --构造条件语句 
DECLARE @where2 varchar(800) --构造条件语句 
IF @strWhere is null or rtrim(@strWhere)='' 
-- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格 
BEGIN --没有查询条件 
SET @where1=' WHERE ' 
SET @where2=' ' 
END 
ELSE 
BEGIN --有查询条件 
SET @where1=' WHERE ('+@strWhere+') AND ' 
SET @where2=' WHERE ('+@strWhere+') ' 
END 

set @strColumn = ' ' + @strColumn + ' ' 
set @strColumnlist = ' ' + @strColumnlist + ' ' 
--构造SQL语句,计算总页数。计算公式为 总页数 = Ceiling ( 记录个数 / 页大小 ) 

SET @sql='SELECT @intPageCount=CEILING((COUNT(*)+0.0)/' 
+ CAST(@intPageSize AS varchar) 
+ ') FROM ' + @strTable + @where2 

--执行SQL语句,计算总页数,并将其放入@intPageCount变量中 

EXEC sp_executesql @sql,N'@intPageCount int OUTPUT',@intPageCount OUTPUT 

--将总页数放到查询返回记录集的第一个字段前,此语句可省略 

SET @strColumnlist= Cast(@intPageCount as varchar(30)) + ' as PageCount,' + @strColumnlist 

IF @intOrder=0 --构造升序的SQL 

SET @sql='SELECT TOP '+ CAST(@intPageSize AS varchar) + ' ' + 
@strColumnlist + 
' FROM ' + @strTable + @where1 + 
@strColumn + '>(SELECT MAX('+@strColumn+') '+ 
' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + 
@strColumn + ' FROM '+ @strTable+@where2+'ORDER BY '+@strColumn+') t) ORDER BY '+ @strColumn 

ELSE --构造降序的SQL 

SET @sql='SELECT TOP '+ CAST(@intPageSize AS varchar) + ' ' + 
@strColumnlist+ 
' FROM '+ @strTable + @where1 + 
@strColumn + '<(SELECT MIN('+@strColumn+') '+ 
' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + 
@strColumn + ' FROM '+ @strTable+@where2+'ORDER BY '+@strColumn+' DESC) t) ORDER BY '+ 
@strColumn + ' DESC' 

IF @intPageNum=1--第一页 

SET @sql='SELECT TOP '+ CAST(@intPageSize AS varchar(10)) + ' ' + @strColumnlist + ' FROM '+@strTable+ 
@where2+' ORDER BY '+@strColumn + CASE @intOrder WHEN 0 THEN '' ELSE ' DESC' 

END 
--PRINT @sql 
EXEC(@sql) 

GO

 

*    pt-slave-restart is the one who can
skip specific errors and restart the slave automatically.But considering
of the consistency of data,we’d better do think twice when skipping
errors by it.There’re two test below.Let’s see how the pt-slave-restart
works.

*

可以建一张测试表

创建视图:将SELECT的查询结果创建为视图(视图是一种虚表,由查找语句得到的结果组成的虚表。视图并不存储数据,只是一个结果集)

 

View Code

设置主键:

 

declare @intPageCount int --声明变量
exec sp_page --执行sp_page存储表
--以下的对应存储过程填写参数
'db_userInfo',--要执行分页的表名
'ID',--按该列来进行分页 
1,--@strColumn列的类型
0, --排序,0-顺序,1-倒序 
'*',--要查询出的字段列表,*表示全部字段 
2, --每页记录数
1,--指定页 
'', --用于构造SQL语句 
@intPageCount output
Print @intPageCount --输出分页

 

Check
replicaiton slave status again.

 

创建临时表只需要在表名前面加#号即可(临时表会在每次关闭数据库时清楚)

1.Test of automatically restart
slave.

二把其他的隐藏起来,虽然也实现了分页效果,但在真正意义上是假分页的效果。

    • PRIMARY KEY 属性名 ##设置唯一的主键
      CONSTRAINT 主键名 PRIMARY KEY (属性1,属性2...)    ##设置联合主键
      

 

图片 3

    • ##创建表

       CREATE TABLE 表名(
       属性1 数据类型 约束,
       属性2 数据类型 约束,
       属性3 数据类型 约束,
       ......
       )
      ##删除表
       TURNCATE TABLE 表名     ##只删除表的数据,保留表
       DROP TABLE 表名         ##删除表的数据以及表本身
      
    • ##往表中插入行 (手动添加数据)

       INSERT INTO 表名(属性1,属性2,属性3......)
       VALUES(值 1,值2,值3......)
      
      ##往表中插入行(SELECT投影的数据插入)
       INSERT INTO 表名(属性1,属性2,属性3......)
       SELECT语句
      
    • ##修改行的内容

       UPDATE 表名
       SET 属性1=值1,属性2=值2,属性3=值3...
       WHERE语句
      

**Check
the slave status the fifth times.**

图片 4

  对于SQL不再做过多的介绍,毕竟作为一个初学者对于SQL(结构化查询语言)也好,关系型数据库也好理解都并不是很深,只知道一些基本的概念。

 1 zlm@192.168.56.101:3306 [zlm]>show slave status\G
 2 *************************** 1. row ***************************
 3                Slave_IO_State: Waiting for master to send event
 4                   Master_Host: 192.168.56.100
 5                   Master_User: repl
 6                   Master_Port: 3306
 7                 Connect_Retry: 60
 8               Master_Log_File: mysql-bin.000091
 9           Read_Master_Log_Pos: 1241
10                Relay_Log_File: relay-bin.000032
11                 Relay_Log_Pos: 1194
12         Relay_Master_Log_File: mysql-bin.000091
13              Slave_IO_Running: Yes
14             Slave_SQL_Running: No
15               Replicate_Do_DB: 
16           Replicate_Ignore_DB: 
17            Replicate_Do_Table: 
18        Replicate_Ignore_Table: 
19       Replicate_Wild_Do_Table: 
20   Replicate_Wild_Ignore_Table: 
21                    Last_Errno: 1677
22                    Last_Error: Column 1 of table 'zlm.test' cannot be converted from type 'varchar(30(bytes))' to type 'varchar(80(bytes) utf8mb4)'
23                  Skip_Counter: 0
24           Exec_Master_Log_Pos: 981
25               Relay_Log_Space: 1908
26               Until_Condition: None
27                Until_Log_File: 
28                 Until_Log_Pos: 0
29            Master_SSL_Allowed: No
30            Master_SSL_CA_File: 
31            Master_SSL_CA_Path: 
32               Master_SSL_Cert: 
33             Master_SSL_Cipher: 
34                Master_SSL_Key: 
35         Seconds_Behind_Master: NULL
36 Master_SSL_Verify_Server_Cert: No
37                 Last_IO_Errno: 0
38                 Last_IO_Error: 
39                Last_SQL_Errno: 1677
40                Last_SQL_Error: Column 1 of table 'zlm.test' cannot be converted from type 'varchar(30(bytes))' to type 'varchar(80(bytes) utf8mb4)'
41   Replicate_Ignore_Server_Ids: 
42              Master_Server_Id: 1003306
43                   Master_UUID: 2a4b3562-2ab6-11e8-be7a-080027de0e0e
44              Master_Info_File: /data/mysql/mysql3306/data/master.info
45                     SQL_Delay: 0
46           SQL_Remaining_Delay: NULL
47       Slave_SQL_Running_State: 
48            Master_Retry_Count: 86400
49                   Master_Bind: 
50       Last_IO_Error_Timestamp: 
51      Last_SQL_Error_Timestamp: 180721 13:50:42
52                Master_SSL_Crl: 
53            Master_SSL_Crlpath: 
54            Retrieved_Gtid_Set: 2a4b3562-2ab6-11e8-be7a-080027de0e0e:12715627-12715632
55             Executed_Gtid_Set: 27af30ca-6800-11e8-ad7e-080027de0e0e:1,
56 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715631
57                 Auto_Position: 1
58          Replicate_Rewrite_DB: 
59                  Channel_Name: 
60            Master_TLS_Version: 
61 1 row in set (0.00 sec)
62 
63 //Table "test" on master is utf8 menas its column varchar(10) contain 30 bytes
64 //Table "test" on slave is utf8mb4 means its column varchar(20) contain 80 bytes.
65 //They cannot be converted.Thus the error 1677 occurs.

图片 5图片 6

    • CREATE VIEW 视图名 AS
      SELECT语句
      

图片 7图片 8

  本系列旨在介绍一些简单开发中用得上的SQL语句以及其使用方法,数据库广泛地使用在各种各样的应用开发中,数据库设计、原理和SQL语言也成了开发者们不得不掌握的一门技能之一,一下便开始简单介绍SQL语言的使用方法。

 1 zlm@192.168.56.101:3306 [zlm]>show slave status\G
 2 *************************** 1. row ***************************
 3                Slave_IO_State: Waiting for master to send event
 4                   Master_Host: 192.168.56.100
 5                   Master_User: repl
 6                   Master_Port: 3306
 7                 Connect_Retry: 60
 8               Master_Log_File: mysql-bin.000091
 9           Read_Master_Log_Pos: 1241
10                Relay_Log_File: relay-bin.000032
11                 Relay_Log_Pos: 814
12         Relay_Master_Log_File: mysql-bin.000091
13              Slave_IO_Running: Yes
14             Slave_SQL_Running: No
15               Replicate_Do_DB: 
16           Replicate_Ignore_DB: 
17            Replicate_Do_Table: 
18        Replicate_Ignore_Table: 
19       Replicate_Wild_Do_Table: 
20   Replicate_Wild_Ignore_Table: 
21                    Last_Errno: 1068
22                    Last_Error: Error 'Multiple primary key defined' on query. Default database: 'zlm'. Query: 'alter table test add primary key(id)'
23                  Skip_Counter: 0
24           Exec_Master_Log_Pos: 601
25               Relay_Log_Space: 1908
26               Until_Condition: None
27                Until_Log_File: 
28                 Until_Log_Pos: 0
29            Master_SSL_Allowed: No
30            Master_SSL_CA_File: 
31            Master_SSL_CA_Path: 
32               Master_SSL_Cert: 
33             Master_SSL_Cipher: 
34                Master_SSL_Key: 
35         Seconds_Behind_Master: NULL
36 Master_SSL_Verify_Server_Cert: No
37                 Last_IO_Errno: 0
38                 Last_IO_Error: 
39                Last_SQL_Errno: 1068
40                Last_SQL_Error: Error 'Multiple primary key defined' on query. Default database: 'zlm'. Query: 'alter table test add primary key(id)'
41   Replicate_Ignore_Server_Ids: 
42              Master_Server_Id: 1003306
43                   Master_UUID: 2a4b3562-2ab6-11e8-be7a-080027de0e0e
44              Master_Info_File: /data/mysql/mysql3306/data/master.info
45                     SQL_Delay: 0
46           SQL_Remaining_Delay: NULL
47       Slave_SQL_Running_State: 
48            Master_Retry_Count: 86400
49                   Master_Bind: 
50       Last_IO_Error_Timestamp: 
51      Last_SQL_Error_Timestamp: 180721 13:39:43
52                Master_SSL_Crl: 
53            Master_SSL_Crlpath: 
54            Retrieved_Gtid_Set: 2a4b3562-2ab6-11e8-be7a-080027de0e0e:12715627-12715632
55             Executed_Gtid_Set: 27af30ca-6800-11e8-ad7e-080027de0e0e:1,
56 2a4b3562-2ab6-11e8-be7a-080027de0e0e:1-12715629
57                 Auto_Position: 1
58          Replicate_Rewrite_DB: 
59                  Channel_Name: 
60            Master_TLS_Version: 
61 1 row in set (0.00 sec)
62 
63 zlm@192.168.56.101:3306 [zlm]>show create table test\G
64 *************************** 1. row ***************************
65        Table: test
66 Create Table: CREATE TABLE `test` (
67   `id` bigint(20) NOT NULL AUTO_INCREMENT,
68   `name` varchar(20) NOT NULL DEFAULT '',
69   PRIMARY KEY (`id`) //The table "test" had been added primary key what hit the error.
70 ) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb4
71 1 row in set (0.00 sec)

View Code

 

 

 2.在表中新建查询,调用存储过程,更改参数实现分页

## 总结:

 

而在现实项目当中一般要在系统或网站上运用,所以显示一个好的分页效果也很重要的,

    • FOREIGN KEY (表内属性名) REFERENCES 表名(表外属性名)

 

你只需要在你制作的项目里调用存储过程就ok了。

 

 

    • ##修改表属性,添加列
       ALTER TABLE 表名
       MODIFY COLUMN 属性名 数据类型 约束   ##Oracle、My_SQl
       ADD COLUMN 属性名 数据类型 约束      ##SQL_server
      ##修改表属性,删除列
       ALTER TABLE 表名
       DROP COLUMN 属性名
      ##修改表属性,修改已有列
       ALTER TABLE 表名
       ALTER COLUMN 属性名 数据类型 约束
      

       

 

SQL(Structured Query Language)即我们所说的结构化查询语言,可以用来对数据库及其内部的基本表进行增、删、查、改的工作一下先简单介绍SQL语句对数据库和表能完成的基本操作:

**Check the slave status on
slave.**

发表评论

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