1.SQL关键字不区分大小写,建议使用大写;
2.当连接数据库服务器后,并没有选择任何数据库,这个时候会显示接受命令的命令提示符,当发出一个命令时,Mysql将它发送给服务器并显示执行的结果,返回的结果以表格的形式显示,第一行代表标签,剩下的行代表查询的结果,通常,表格的列标签是取自数据库表的名字,如果正在检索一个表达式而非表列的值,则mysql使用表达式本身作为列标签,并显示返回了多少行结果,以及使用了多少时间,注意这个时间不是一个精确的值,它根据网络服务器的性能,以及网络环境的变化有所不同。
mysql> SELECT VERSION() , CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 8.0.11 | 2019-03-09 |
+-----------+--------------+
1 row in set (0.00 sec)
3.可以在一行命令中输入多个命令,只要使用分号分隔开即可。Mysql接受自由格式的书写,收集输入行,直到遇到分号才执行。如果不想执行正在输入过程中的一个命令,输入\c可以取消。
mysql> SELECT
-> DATE()
-> \c
mysql>
4.当输入不同的字符时,如果在命令没有执行执行之前,进行多行输入,有可能会遇到以下几种情况。
例如:‘>提示符,告诉用户,希望完善剩余的字符串部分,注意这个时候输入\c是不行的,它会被认为是字符串,需要先终止字符,然后如果想取消命令,使用\c。
mysql> SELECT name FROM student WHERE ID='
'> 110'
->
5.显示数据库使用SHOW DATABASES;注意有分号。而选择使用的数据库,则使用"USE DATABASE_NAME",注意这里没有分号,也可以加分号,USE和QUIE命令一样,注意:USE必须在一个单行上给出。
6.赋予用户特殊的权限,只允许使用自己的数据库,命令为:
GRANT ALL ON database_name.* TO 'your_mysql_name' @'your_client_host';
7.创建数据库,在不同的系统上,数据库的名字在访问的时候有所限制,在unix中,数据库的名字是区分大小写的,访问时必须与创建时的一致,Windos下, 数据库的名字不区分大小写,可以访问。但是,尽量创建与访问一致。数据库只需创建一次,在使用的之前,必须选定指定的数据库。
8.显示表,创建表,验证表
mysql> CREATE TABLE person(
-> name varchar(20),
-> age int,
-> sex char(1),
-> birth DATE);
Query OK, 0 rows affected (0.49 sec)
mysql> SHOW TABLES;
+----------------+
| Tables_in_liud |
+----------------+
| person |
+----------------+
21 rows in set (0.00 sec)
mysql> DESCRIBE person;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
9.填充表中的数据,可以使用LOAD和INSERT;
LOAD:使用LOAD可以从外部文本文件将数据填充到表中,每一行包含一个记录,用定位符(tab)把值分开,每一行的数据与表中的数据次序对应,对于空值,可以使用空格,也可以使用一个特殊的标记字符即可。注意,windos中的编辑器使用\r\n作为行的结束符创建文件,在os x 上使用\r作为结束符。也可以指出分隔符和行尾标记,但默认标记是定位符和换行符。
mysql> LOAD DATA LOCAL INFILE '/PATH/person.txt' INTO TABLE persion;
INSER:提供每一列的值,每次插入一个记录,
mysql> INSERT INTO person VALUES('LD',25,'F','1993-09-11');
Query OK, 1 row affected (0.14 sec)
10.各种选择语句
mysql> SELECT * FROM person;
mysql> SELECT * FROM person WHERE name = "LD";
mysql> SELECT * FOMR person WHERE age > 20 ;
mysql> SELECT * FROM person WHERE name = "Lx" AND age > 20;
mysql> SELECT * FROM person WHERE name = "Lx" OR age > 20;
mysql> SELECT name FROM person WHERE age > 20;
DISTINCT使用检索出每个唯一的输出记录;
ORDER BY column 子句,按照顺序排序,默认是升序,使用DESC进行降序,使用BINARY强制执行区分大小写的分类功能。
mysql> SELECT DISTINCT birth FROM person;
mysql> SELECT name,birth FROM person ORDER BY birth;
mysql> SELECT name,birth FROM person ORDER BY birth DESC;
11.日期函数,YEAR(),CURDATE(),DATE(),NOW(),MONTH(),
12.在Mysql中,0或NULL意味着假而其他的值意味着真,布尔运算的默认值为1;注意判断某个列数据不是空,使用eg:birth IS NOT NULL,而不是birth != NULL;在执行ORDER BY ... ASC时,NULL值排在最前面,ORDER BY ... DESC,NULL值排在最后,
13.SQL模式匹配使用"_"匹配任意单个字符,”%“匹配任意数目字符,在mysql中,sql的模式匹配时默认是忽略大小写,注意在sql模式时,不能使用=或!=,而应使用LIKE 或 NOT LIKE比较操作符。
mysql> SELECT * FROM PERSON WHERE NAME LIKE "L%";
+------+------+------+------------+
| name | age | sex | birth |
+------+------+------+------------+
| LD | 25 | F | 1993-09-11 |
+------+------+------+------------+
1 row in set (0.00 sec)
MySQL提供的其他的模式匹配是使用扩展正则表达式,当对这类模式进行匹配的时候,使用REGEXP,NOT REGEXP操作符。‘.’:代表任意单个字符,‘*':代表任意字符,‘^’:代表以指定字符开头, ‘$':代表以指定字符结束。
COUNT()用来进行计数。
14.如果需要从多个表中提取信息,则需要指定多个表,同时,需要使用特定的列将两个表连接起来;eg:
mysql> SELECT NAME ,AGE FOMR PERSON , EVENT WHERE PERSON.NAME = EVENT.NAME AND EVENT.AGE > 20;
当然也不是一定需要两个不同的表进行连接,也可以让表对其自身进行连接。
15.获取数据库:SHOW DATABASES,. 显示当前数据表:SHOW TABLES; 查看数据表的信息:DESCRIBE TABLE_NAME;
16.使用批处理进行批量操作;
在shell下,执行 mysql< batch-file
在window下运行mysql,执行 shell : mysql -h host -u user -p < batch-file
如果想指定查询的输出,可以使用:
shell > mysql < batch-file > mysql.out
F:\Cmder>mysql -u root -p < C:\Users\liumin\Desktop\source.bat
Enter password: ******
name age sex birth
LD 25 F 1993-09-11
F:\Cmder>mysql -u root -p < C:\Users\liumin\Desktop\source.bat > mysql.out
Enter password: ******
注意,使用脚本输出的格式和使用交互式查询的到的结果的格式是不一样的,其更简单,如果想要得到交互式下的格式,可以使用 mysql -t 。注意脚本可以执行,通过在shell下执行,source filename 或 \. filename;
17.最大值,MAX(),EG:
mysql> SELECT MAX(AGE) AS AGE FROM PERSON;
mysql> SELECT NAME ,MAX(AGE) AS AGE FROM PERSON GROUP BY NAME;
18.外键,MySQL的innoDB存储引擎支持对外部关键字约束条件的检查,只是连接两个表时,不需要外部关键字。对于除InnoDB类型的表,当使用REFERRENCE table_name(col_name)子句定义列时可以使用外部关键字,该子句没有实际的效果,只作为备忘录或注释来提醒。
根据多个键搜索,可以使用OR关键字,也可以使用UNION将两个单独的SELECT语句的输出合成到一起来更有效。
可以使用ATUO_INCREMENT属性为新的行为产生唯一的标识。AUTO_INCREMENT的值默认是1,可以通过在创建表的时候指定其值。
19.MYSQL工具的使用
mysql是MYSQL服务器;
mysql_safe,mysql.server,mysqld_multi是服务器启动脚本;
mysql_install_db初始化数据目录和初始化数据库;
mysqladmin用于管理功能的客户程序;
mysqlcheck执行表维护操作;
mysqldump,mysqlhotcopy负责数据库备份;
mysqlimport导入数据文件;
mysqlshow显示信息数据库和表的相关信息;
myisamchk执行表维护操作;
myisampack产生压缩,只读的表;
mysqlbinlog用于处理二进制日志文件的实用工具;
perror显示错误代码的含义。
20.Mysql用户名和密码;
Mysql用户名与操作系统的用户名没有任何关系,登录mysql的密码与操作系统的密码也没有任何关系,Mysql的加密密码使用自己的算法,MySQL密码加密与PASSWORD()SQL函数的相同;
向Mysql中添加用户和密码:使用GRANT,直接操作MySQL授权表;
mysq> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root@%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO 'root'@'localhost';
mysql> GRANT USAGE ON *.* TO 'LAND'@''localhost';
第一,第二个为:root用户为超级用户,因为它具有所有的权限,唯一的区别是限制了登录的主机,第一个只能从本地登录,第二个可以从任何主机登录;
第三个为root角色,没有密码,有RELOAD,PROCESS权限,仅限主机登录;
第四个为land角色,没有密码,未授予任何权限,仅限主机登录;
可以直接在user表中插入相应的角色,前提是执行该操作的角色必须具有插入user表的权限;
mysql> INSERT INTO user values('localhost','land',PASSWORD('123456'),Y,.....Y);
mysql> INSERT INTO user values('%','land'同上);
mysql> INSERT INTO user SET Host='localhost' ,User='land',Reload_priv ='Y'...);
mysql> INSERT INTO user (Host,User,Password) VALUSE('localhost','land','123456');
mysql> FLUSH PRIVILEGES;
第一个为将按照user表的顺序,一一为其列赋值;Y代表启动该权限。
第二个与第一个一样,区别是限制登录的主机,第一个为本地登录,第二个为任意主机;
第三个为特定的列赋值;
第四个为也是为特定的列赋值,与第三个效果相同,方式不同罢了。
注意:使用insert创建账户的时候,需要使用FLUSH 来告诉服务器重读授权表,否则,只有在重新启动服务器的时候才会被注意。对于显示的列赋值为Y,其他的默认权限是‘N';使用insert时,使用password()函数是为了加密密码,而GRANT自动帮我们加密,所以不需要密码函数。user表权限为全局权限。
创建访问专门数据库的账户:
mysql> GRANT SELECT,INSERT,DELETE,UPDATE ON 'liud.*' TO 'land'@'localhost' IDENTIFIED BY 'qaqaqa';
mysql> GRANT SELECT,INSERT,DELETE,UPDATE,DROP ON 'liud.*' TO 'land'@'gohome.gov' IDENTIFIED BY 'qaqaqa';
第一个为land用户具有增删改liud数据库的任何表的权限,仅限本机访问,密码为qaqaqa;
第二个为land用户具有增删改查liud数据库的任何表的权限,,仅限从gohome.gov访问。
当然也可以使用INSERT语句插入;
mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','land',PASSWORD('123456'));
mysql> INSERT INTO db(Host,Db,User,Select_priv,Update_priv,Insert_priv,Create_priv,Drop_priv) VALUES('locahost','liud','land','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
因为user表的权限是全局权限,所以不能再其里面设置权限,它的权限是针对于所有数据库的,要想设计特定数据库的权限,则在db表中修改。
21.删除用户
mysql> DROP USER_NAME;
注意:删除用户,进行删除操作的角色必须具备DELETE权限和CREATE USER权限,注意:DROP USER不能自动关闭已经打开的用户对话,如果用户已经打开,此时取消用户,不会生效,直到用户关闭的时候,才会生效。
22.限制账户的资源,采用的方法是设置max_user_connections系统变量的值,注意,该方法严格限制于全局,不允许管理具体的账户,只用于限制使用单一账户同时连接的数量。MySQL5.1中具体限制的资源如下:每小时可以发出的查询数,更新数,连接服务器的次数,每个账户同时连接服务器的连接数。eg:
mysql> GRANT ALL ON *.* TO 'root'@'localhost'
-> IDENTIFIED BY 'qaqaqa'
-> WITH MAX_QUERIES_PER_HOUR 20
-> MAX_UPDATES_PER_HOUR 10
-> MAX_CONNECTIONS_PER_HOUR 5
-> MAX_USER_CONNECTIONS 2
每小时限制值均为整数,代表每小时的记数,如果GRANT语句没有WITH子句,则限制的值为默认值0,即没有任何限制。
如果想要设置或更改已有账户的限制,在全局级别使用GRANT USAGE语句即可。
mysql> GRANT USAGE ON *.* TO 'root'@'localhost' WITH MAX_QUERIES_PER_HOUR 300;
取消限制,则将该值设置为0即可,
mysql> GRANT USAGE ON *.* TO 'root'@'localhost' WITH MAX_QUERIES_PER_HOUR 0
注意:这里的限制是根据账户进行的资源计算,而非根据每个客户端,一个账户,在不同的客户端登录,不同客户端下的查询被计算到一起。
将当前所有账户当前的计数重新设置为零,可以执行FLUSH USER_RESOURCE语句,也可以通过重载授权表来重新计数。
23.设置用户密码方式:⑴使用mysqladmin命令⑵执行SET PASSWORD语句⑶使用GRANT USAGE语句⑷也可以直接修改user表。注意使用SET,INSERT,UPDATE进行修改密码的时候,需要使用PASSWORD()函数,对密码进行加密。如果没有进行加密,则保存在表中的是一个字符串,当进行连接的时候,Mysql会使用加密函数对输入的密码进行加密,然后与user表中的password进行比较,比较定会失败,则服务器拒接连接。
shell> mysqladmin -u user_name -h host_name password 'newpassword'
mysql> SET PASSWORD FOR 'land'@'localhost' = PASSWORD ('123456');
mysql> GRANT USAGE ON *.* TO 'land'@'localhost' IDENTIFIED BY '123456';
mysql> INSERT INTO user (Host,User,Password) VALUES ('%','land',PASSWORD('123456'));
mysql> FLUSH PRIVILEGES;
mysql> UPDATE user SET Password =PASSWORD('123456') WHERE Host= '%' AND User = 'land';
mysql> FLUSH PRIVILEGES;
参考《mysql5.5官方手册》