MySQL的服务连接操作和语句规则简介
1. 在Windows下安装mysql服务的方法
在命令行下输入: mysqld --install MySQL(这里的MySQL用户可以自己定义为其他名字,它会作为安装后的mysql服务名,
如果省略不写,则默认为MySQL), 然后按回车。
2. 在Windows下卸载mysql服务的方法
在命令行下输入: mysqld --remove
3. 在Windows下打开mysql服务的方法。
在命令行下输入: net start mysql (或者是其他服务名) , 然后按回车,这里的“mysql”是服务名。
4. 在Windows下关闭mysql服务的方法
方法A: 在命令行下输入: mysqladmin -u root -p shutdown ,然后会出现提示要求输入密码,输入密码后 ,然后按回车。
方法B: 在命令行下输入: net stop mysql (用户机器里的mysql服务名) ,然后会出现提示要求输入密码,输入密码后 ,然后按回车。
5. 在Windows下测试mysql服务器是否工作
在命令行下输入: mysqlshow -u root mysql -p ,然后会出现提示要求输入密码,输入密码后,看到Table的一些信息,则说明mysql服务器工作。
6. 在命令行下连接数据库
为了连接服务器,当调用mysql时,通常需要提供一个MySQL用户名并且很可能需要一个 密码。如果服务器运行在登录服务器之外的其它机器上,还需要指定主机名。联系管 理员以找出进行连接所使用的参数 (即,连接的主机、用户名和使用的密码)。知道正确的参数后,可以按照以下方式进行连接:
shell> mysql -h host -u user -p
Enter password: ********
host代表MySQL服务器运行的主机名
user代表MySQL账户用户名
(以上两个字符串在设置时应替换为正确的值。)
******** 代表你的密码;
当mysql显示Enter password:提示时输入它。
如果有效,你应该看见mysql>提示符后的一些介绍信息:
shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 25338 to server version: 5.5-alpha-standard
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
mysql> 提示符告诉你mysql准备为你输入命令。
一些MySQL安装允许用户以匿名(未命名)用户连接到本地主机上运行的服务器。如果你的机器是这种情况,你应该能不带任何选项地调用mysql与该服务器连接:
shell> mysql
成功地连接后,可以在mysql>提示下输入QUIT (或\q)随时退出:
mysql> QUIT
Bye
注意: 使用以上这些方法时,要先保证将MySQL的安装目录里的 bin目录的路径(C:\Program Files\MySQL\MySQL Server 5.5\bin\)
加到Windows系统PATH环境变量中了。
7. 查版本号和当前日期
连接了mysql服务器后,输入:SELECT VERSION(), CURRENT_DATE; ,然后按回车。
8. mysql的sql语句不区分大小写,但在Unix下,数据库名称是区分大小写的(不像SQL关键字)
例如:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
是等价的。
9. 可以在一行上输入多条语句,只需要以一个分号间隔开各语句:
例如:mysql> SELECT VERSION(); SELECT NOW();
10.可以不全在一个行内给出一个命令,较长命令可以输入到多个行中。
mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束。
(换句话说,mysql接受自由格式的输入:它收集输入行但直到看见分号才执行。)
例如:
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
11.如果你决定不想执行正在输入过程中的一个命令,输入\c取消它:
例如:
mysql> SELECT
-> USER()
-> \c
mysql>
这里也要注意提示符,在你输入\c以后,它切换回到mysql>,提供反馈以表明mysql准备接受一个新命令。
12.提示符的含义:
提示符 含义
mysql> 准备好接受新命令。
-> 等待多行命令的下一行。
'> 等待下一行,等待以单引号(“'”)开始的字符串的结束。
"> 等待下一行,等待以双引号(“"”)开始的字符串的结束。
`> 等待下一行,等待以反斜点(‘`’)开始的识别符的结束。
/*> 等待下一行,等待以/*开始的注释的结束。
A. 当你打算在一个单行上发出一个命令时,通常会“偶然”出现多行语句,但是没有终止分号。在这种情况中,mysql等待进一步输入:
mysql> SELECT USER()
->
如果出现这种情况(你认为输完了语句,但是只有一个->提示符响应),很可能mysql正在等待分号。如果你没有注意到提示符的提示,
在意识到你需要做什么之前,你可能会呆坐一会儿。这时,输入一个分号完成语句,mysql就将会执行:
mysql> SELECT USER()
-> ;
所以,执行完一条语句后,最好记得都加一个分号,即使有些语句不要求,但加上也不会出错的。
B. 在字符串收集期间将出现 '> 和 "> 提示符(提示MySQL正等待字符串的结束)。
在MySQL中,可以写由‘'’或‘"’字符括起来的字符串 (例如,'hello'或"goodbye"),并且mysql允许输入跨越多行的字符串。当看到一个 '>
或 "> 提示符时,这意味着已经输入了包含以‘'’或‘"’括号字符开始的字符串的一行,但是还没有输入终止字符串的匹配引号。
这显示你粗心地省掉了一个引号字符。例如:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
如果你输入SELECT语句,然后按Enter(回车)键并等待结果,什么都没有出现。不要惊讶,“为什么该查询这么长呢?”,注意">提示符提供的线索。
它告诉你mysql期望见到一个未终止字符串的余下部分。(你看见语句中的错误吗?字符串"Smith丢掉了第二个引号。)
走到这一步,你该做什么?最简单的是取消命令。然而,在这种情况下,你不能只是输入\c,因为mysql作为它正在收集的字符串的一部分来解释它!
相反,应输入关闭的引号字符(这样mysql知道你完成了字符串),然后输入\c:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'> '\c
mysql>
提示符回到mysql>,显示mysql准备好接受一个新命令了。
`> 提示符类似于 '> 和"> 提示符,但表示你已经开始但没有结束以`> 开始的识别符。
知道'>和">提示符的含义很重要,因为如果你错误地输入一个未终止的字符串,任何后面输入的行将要被mysql忽略--包括包含QUIT的行!
这可能令人相当困惑,特别是如果取消当前命令前还不知道你需要提供终止引号。
MySQL的基本语句
1. 查看服务器上当前存在什么数据库: SHOW DATABASES;
2. 访问存在的某一数据库: USE database_name;
例如test: USE test;
(注意: USE,类似QUIT,不需要一个分号。如果你喜欢,你可以用一个分号终止这样的语句,这无碍。
USE语句在使用上也有另外一个特殊的地方:它必须在一个单行上给出。)
3. 查看当前正在使用的数据库: SELECT DATABASE();
4. 创建数据库: CREATE DATABASE database_name;
5. 使用数据库: USE database_name;
(创建数据库并不表示选定并使用它,你必须明确地操作,使它成为当前的数据库。
数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。)
6. 创建表: CREATE TABLE table_name(field type,field type,field type, ...);
例如: CREATE TABLE user(userName varchar(20),userAge varchar(10), userSex varchar(2));
7. 查看表: DESCRIBE table_name;
例如: DESCRIBE user; (将会显示user表的具体结构)
8. 查询所有数据: SELECT * FROM table_name;
9. 查询特殊行: SELECT * FROM table_name WHERE conditions;
(conditions表示条件,一般是表达式)
例如: SELECT * FROM user WHERE userName = 'Jim';
SELECT * FROM user WHERE userAge > 20;
10. 查询特殊列: SELECT field1,field2,field3[,field4][,field5][,...] FROM table_name; (结果可以出现重复)
例如: SELECT userName, userAge FROM user;
增加关键字DISTINCT检索出每个唯一的输出记录: SELECT DISTINCT field1, field2,field3[field4][field5][...] FROM table_name;
例如: SELECT DISTINCT userName, userAge FROM user;
11. 查询并分类: SELECT field1,field2,field3[,field4][,field5][,...] FROM table_name ORDER BY field1[,field2][,field3];
例如: SELECT userName, userAge FROM user ORDER BY userAge;
ORDER BY 语句默认是升序,以上例子语句相对于: SELECT userName, userAge FROM user ORDER BY userSex,userAge ASC;
如要实现降序,以上语句应把ASC 改为 DESC .
A. ASC或者DESC只对最接近它的那个列有效,即仅适用于在它前面的列名(userAge);不影响userSex列的排序顺序。
B. 如果存在NULL值,执行ORDER BY时,如果运行 ORDER BY ... ASC,则NULL值出现在最前面,若运行ORDER BY ... DESC,则NULL值出现在最后面。
12. 模糊查询: 要想找出姓“张”的用户的信息: SELECT * FROM user WHERE userName LIKE '张%';
要想找出姓名以“华”字结尾的用户的信息: SELECT * FROM user WHERE userName LIKE '%华';
要想找出姓名中包含“辉”字的用户的信息: SELECT * FROM user WHERE userName LIKE '%辉%';
要想找出姓名中正好包含4个字符的用户的信息,使用4个“_”模式字符: SELECT * FROM user WHERE userName LIKE '____';
SQL模式匹配允许使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。
13. 统计行数: 要想统计user表中有多少个用户: select count(*) from user;
结果类似:+----------+
| count(*) |
+----------+
| 9 |
+----------+
14. 按分组统计: 要想按“性别”分组来统计用户的数量: SELECT userSex, count(*) FROM user GROUP BY userSex;
结果类似: | userSex | count(*) |
+------------+-----------+
| 女 | 2 |
15. 多表查询: 要想从两个表中查询出学生姓名和他所在的寝室号: SELECT user.userName,bedroom.roomNum FROM user,bedroom WHERE user.roomId=bedroom.roomId;
结果类似: +---------------+--------------+
| userName | roomNum |
+---------------+--------------+
| 张三 | 1 |
| 李四 | 1 |
| 王五 | 1 |
| 陈五 | 1 |
| 陈七 | 2 |
| 张李杜 | 2 |
| 邓小李 | 2 |
| 刘辉 | 2 |
+---------------+--------------+
(其中bedroom表中的主键roomId作为user表中的外键)
16. 查询最大列: 要想从user表中查询出最大的年龄: SELECT MAX(userAge) FROM user;
结果类似: +--------------------+
| MAX(userAge) |
+--------------------+
| 34 |
+--------------------+
17. 按最大列查询: 要想从user表中查询出年龄最大的用户的信息: SELECT * FROM user WHERE userAge=(SELECT MAX(userAge) FROM user);
结果类似: +---------+---------------+------------+------------+----------+
| userId | userName | userAge | userSex | roomId |
+---------+---------------+------------+------------+----------+
| 6 | 张李杜 | 34 | 女 | 2 |
+---------+---------------+------------+------------+----------+
18. 根据两个键查询: 要想从user表中查询出姓名叫“张三”,且性别为“男”的用户的信息: SELECT * FROM user WHERE userName='张三' AND userSex='男';
结果类似: +---------+---------------+------------+------------+----------+
| userId | userName | userAge | userSex | roomId |
+--------+----------------+------------+------------+----------+
| 1 | 张三 | 20 | 男 | 1 |
+--------+----------------+------------+------------+----------+
要想从user表中查询出姓名叫“陈五”,或性别为“男”的用户的信息: SELECT * FROM user WHERE userName='陈五' OR userSex='男';
结果类似: +---------+----------------+------------+-----------+-----------+
| userId | userName | userAge | userSex | roomId |
+--------+-----------------+------------+-----------+-----------+
| 1 | 张三 | 20 | 男 | 1 |
| 2 | 李四 | 21 | 男 | 1 |
| 3 | 王五 | 22 | 男 | 1 |
| 4 | 陈五 | 21 | 女 | 1 |
| 8 | 刘辉 | 22 | 男 | 2 |
+--------+-----------------+------------+-----------+-----------+
19.字符集和校对规则: MySQL服务器有一个服务器字符集和一个服务器校对规则,它们均不能设置为空。
每一个数据库有一个数据库字符集和一个数据库校对规则,它不能够为空。
如果在CREATE TABLE语句中没有指定表字符集和校对规则,则使用数据库字符集和校对规则作为默认值。它们没有其它目的。
如果在列定义中没有指定列字符集和校对规则,则默认使用表字符集和校对规则。表字符集和校对规则是MySQL的扩展;在标准SQL中没有。
MySQL的数据类型
数据类型: 数值类型、日期/时间类型、字符串类型
几种列类型描述使用了下述惯例:
D: 适用于浮点和定点类型,并表示小数点后面的位数。最大可能的值是30,但不应大于M-2。
[ 和 ]: 方括号(‘[’和‘]’)表示可选部分。
1. 数值类型: integer(int)、smallint、decimal(dec)、numeric等
注意: A. MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。
该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。
B. 显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。
如果为一个数值列指定ZEROFILL,MySQL自动为该列添加UNSIGNED属性。
C. decimal和numeric类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据
例如: salary DECIMAL(5,2)
在该例子中,5是精度,2是标度。精度表示保存值的总位数,标度表示小数点后面可以保存的位数。
2.近似数值类型: float、real、double precision
注意: A. 对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。
B. SQL标准允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。
C. MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。
这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。
例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。
MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。
D. MySQL将DOUBLE视为DOUBLE PRECISION(非标准扩展)的同义词。MySQL还将REAL视为DOUBLE PRECISION(非标准扩展)的同义词,
除非SQL服务器模式包括REAL_AS_FLOAT选项。
E. 为了保证最大可能的可移植性,需要使用近似数值数据值存储的代码应使用FLOAT或DOUBLE PRECISION,不规定精度或位数。
3.日期和时间类型: 日期类型: DATETIME、DATE和TIMESTAMP
时间类型: TIME和YEAR
A. DATETIME: 用'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。
支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
B. DATE: 用'YYYY-MM-DD'格式检索和显示DATE值
支持的范围是'1000-01-01'到 '9999-12-31'。
C. TIMESTAMP:TIMESTAMP列类型的属性不固定,取决于MySQL版本和服务器运行的SQL模式。
D. TIME: 用'HH:MM:SS'格式检索和显示TIME值(或对于大的小时值采用'HHH:MM:SS'格式)。
TIME值的范围可以从'-838:59:59'到'838:59:59'。
E. YEAR: 用YYYY格式检索和显示YEAR值。
YEAR值的范围是1901到2155。
注意: 可以指定各种格式的YEAR值:
四位字符串,范围为'1901'到'2155'。
四位数字,范围为1901到2155。
两位字符串,范围为'00'到'99'。'00'到'69'和'70'到'99'范围的值被转换为2000到2069和1970到1999范围的YEAR值。
两位整数,范围为1到99。1到69和70到99范围的值被转换为2001到2069和1970到1999范围的YEAR值。
两位整数范围与两位字符串范围稍有不同,因为你不能直接将零指定为数字并将它解释为2000。
你必须将它指定为一个字符串'0'或'00'或它被解释为0000。
函数返回的结果,其值适合YEAR上下文,例如NOW()。
非法YEAR值,被转换为0000。
4.字符串类型: char和varchar类型
binary和varbinary类型
blob和text类型
enum类型
set类型
char和varchar类型: A. CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数。例如,CHAR(30)可以占用30个字符。
B. CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。
当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。
VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。
C. 同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。
VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
D. 用下面例子说明CHAR和VARCHAR之间的差别:
值 char(4) 存储需求 varchar(4) 存储需求
'' ' ' 4个字节 ‘’ 1个字节
‘ab’ ‘ab ’ 4个字节 ‘ab ’ 3个字节
‘abcd’ ‘abcd’ 4个字节 ‘abcd’ 5个字节
‘abcdefgh’ ‘abcd’ 4个字节 ‘abcd’ 5个字节
binary和varchar类型: A. BINARY和VARBINARY允许的最大长度一样,如同CHAR和VARCHAR,不同的是BINARY和VARBINARY的长度是字节长度而不是字符长度。
blob和text类型: BLOB 列被视为二进制字符串(字节字符串)。TEXT列被视为非二进制字符串(字符字符串)。
BLOB类型: TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
TEXT类型: TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
A. 在大多数方面,可以将BLOB列视为能够足够大的VARBINARY列。同样,可以将TEXT列视为VARCHAR列。
B. 当保存或检索BLOB和TEXT列的值时不删除尾部空格。(这与VARBINARY和VARCHAR列相同)。
enum类型: ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值。
A. 枚举最多可以有65,535个元素。 创建表时,ENUM成员值的尾部空格将自动被删除。
set类型: SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。
A. SET最多可以有64个不同的成员。当创建表时,SET成员值的尾部空格将自动被删除。
1. 在Windows下安装mysql服务的方法
在命令行下输入: mysqld --install MySQL(这里的MySQL用户可以自己定义为其他名字,它会作为安装后的mysql服务名,
如果省略不写,则默认为MySQL), 然后按回车。
2. 在Windows下卸载mysql服务的方法
在命令行下输入: mysqld --remove
3. 在Windows下打开mysql服务的方法。
在命令行下输入: net start mysql (或者是其他服务名) , 然后按回车,这里的“mysql”是服务名。
4. 在Windows下关闭mysql服务的方法
方法A: 在命令行下输入: mysqladmin -u root -p shutdown ,然后会出现提示要求输入密码,输入密码后 ,然后按回车。
方法B: 在命令行下输入: net stop mysql (用户机器里的mysql服务名) ,然后会出现提示要求输入密码,输入密码后 ,然后按回车。
5. 在Windows下测试mysql服务器是否工作
在命令行下输入: mysqlshow -u root mysql -p ,然后会出现提示要求输入密码,输入密码后,看到Table的一些信息,则说明mysql服务器工作。
6. 在命令行下连接数据库
为了连接服务器,当调用mysql时,通常需要提供一个MySQL用户名并且很可能需要一个 密码。如果服务器运行在登录服务器之外的其它机器上,还需要指定主机名。联系管 理员以找出进行连接所使用的参数 (即,连接的主机、用户名和使用的密码)。知道正确的参数后,可以按照以下方式进行连接:
shell> mysql -h host -u user -p
Enter password: ********
host代表MySQL服务器运行的主机名
user代表MySQL账户用户名
(以上两个字符串在设置时应替换为正确的值。)
******** 代表你的密码;
当mysql显示Enter password:提示时输入它。
如果有效,你应该看见mysql>提示符后的一些介绍信息:
shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 25338 to server version: 5.5-alpha-standard
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
mysql> 提示符告诉你mysql准备为你输入命令。
一些MySQL安装允许用户以匿名(未命名)用户连接到本地主机上运行的服务器。如果你的机器是这种情况,你应该能不带任何选项地调用mysql与该服务器连接:
shell> mysql
成功地连接后,可以在mysql>提示下输入QUIT (或\q)随时退出:
mysql> QUIT
Bye
注意: 使用以上这些方法时,要先保证将MySQL的安装目录里的 bin目录的路径(C:\Program Files\MySQL\MySQL Server 5.5\bin\)
加到Windows系统PATH环境变量中了。
7. 查版本号和当前日期
连接了mysql服务器后,输入:SELECT VERSION(), CURRENT_DATE; ,然后按回车。
8. mysql的sql语句不区分大小写,但在Unix下,数据库名称是区分大小写的(不像SQL关键字)
例如:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
是等价的。
9. 可以在一行上输入多条语句,只需要以一个分号间隔开各语句:
例如:mysql> SELECT VERSION(); SELECT NOW();
10.可以不全在一个行内给出一个命令,较长命令可以输入到多个行中。
mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束。
(换句话说,mysql接受自由格式的输入:它收集输入行但直到看见分号才执行。)
例如:
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
11.如果你决定不想执行正在输入过程中的一个命令,输入\c取消它:
例如:
mysql> SELECT
-> USER()
-> \c
mysql>
这里也要注意提示符,在你输入\c以后,它切换回到mysql>,提供反馈以表明mysql准备接受一个新命令。
12.提示符的含义:
提示符 含义
mysql> 准备好接受新命令。
-> 等待多行命令的下一行。
'> 等待下一行,等待以单引号(“'”)开始的字符串的结束。
"> 等待下一行,等待以双引号(“"”)开始的字符串的结束。
`> 等待下一行,等待以反斜点(‘`’)开始的识别符的结束。
/*> 等待下一行,等待以/*开始的注释的结束。
A. 当你打算在一个单行上发出一个命令时,通常会“偶然”出现多行语句,但是没有终止分号。在这种情况中,mysql等待进一步输入:
mysql> SELECT USER()
->
如果出现这种情况(你认为输完了语句,但是只有一个->提示符响应),很可能mysql正在等待分号。如果你没有注意到提示符的提示,
在意识到你需要做什么之前,你可能会呆坐一会儿。这时,输入一个分号完成语句,mysql就将会执行:
mysql> SELECT USER()
-> ;
所以,执行完一条语句后,最好记得都加一个分号,即使有些语句不要求,但加上也不会出错的。
B. 在字符串收集期间将出现 '> 和 "> 提示符(提示MySQL正等待字符串的结束)。
在MySQL中,可以写由‘'’或‘"’字符括起来的字符串 (例如,'hello'或"goodbye"),并且mysql允许输入跨越多行的字符串。当看到一个 '>
或 "> 提示符时,这意味着已经输入了包含以‘'’或‘"’括号字符开始的字符串的一行,但是还没有输入终止字符串的匹配引号。
这显示你粗心地省掉了一个引号字符。例如:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
如果你输入SELECT语句,然后按Enter(回车)键并等待结果,什么都没有出现。不要惊讶,“为什么该查询这么长呢?”,注意">提示符提供的线索。
它告诉你mysql期望见到一个未终止字符串的余下部分。(你看见语句中的错误吗?字符串"Smith丢掉了第二个引号。)
走到这一步,你该做什么?最简单的是取消命令。然而,在这种情况下,你不能只是输入\c,因为mysql作为它正在收集的字符串的一部分来解释它!
相反,应输入关闭的引号字符(这样mysql知道你完成了字符串),然后输入\c:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'> '\c
mysql>
提示符回到mysql>,显示mysql准备好接受一个新命令了。
`> 提示符类似于 '> 和"> 提示符,但表示你已经开始但没有结束以`> 开始的识别符。
知道'>和">提示符的含义很重要,因为如果你错误地输入一个未终止的字符串,任何后面输入的行将要被mysql忽略--包括包含QUIT的行!
这可能令人相当困惑,特别是如果取消当前命令前还不知道你需要提供终止引号。
MySQL的基本语句
1. 查看服务器上当前存在什么数据库: SHOW DATABASES;
2. 访问存在的某一数据库: USE database_name;
例如test: USE test;
(注意: USE,类似QUIT,不需要一个分号。如果你喜欢,你可以用一个分号终止这样的语句,这无碍。
USE语句在使用上也有另外一个特殊的地方:它必须在一个单行上给出。)
3. 查看当前正在使用的数据库: SELECT DATABASE();
4. 创建数据库: CREATE DATABASE database_name;
5. 使用数据库: USE database_name;
(创建数据库并不表示选定并使用它,你必须明确地操作,使它成为当前的数据库。
数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。)
6. 创建表: CREATE TABLE table_name(field type,field type,field type, ...);
例如: CREATE TABLE user(userName varchar(20),userAge varchar(10), userSex varchar(2));
7. 查看表: DESCRIBE table_name;
例如: DESCRIBE user; (将会显示user表的具体结构)
8. 查询所有数据: SELECT * FROM table_name;
9. 查询特殊行: SELECT * FROM table_name WHERE conditions;
(conditions表示条件,一般是表达式)
例如: SELECT * FROM user WHERE userName = 'Jim';
SELECT * FROM user WHERE userAge > 20;
10. 查询特殊列: SELECT field1,field2,field3[,field4][,field5][,...] FROM table_name; (结果可以出现重复)
例如: SELECT userName, userAge FROM user;
增加关键字DISTINCT检索出每个唯一的输出记录: SELECT DISTINCT field1, field2,field3[field4][field5][...] FROM table_name;
例如: SELECT DISTINCT userName, userAge FROM user;
11. 查询并分类: SELECT field1,field2,field3[,field4][,field5][,...] FROM table_name ORDER BY field1[,field2][,field3];
例如: SELECT userName, userAge FROM user ORDER BY userAge;
ORDER BY 语句默认是升序,以上例子语句相对于: SELECT userName, userAge FROM user ORDER BY userSex,userAge ASC;
如要实现降序,以上语句应把ASC 改为 DESC .
A. ASC或者DESC只对最接近它的那个列有效,即仅适用于在它前面的列名(userAge);不影响userSex列的排序顺序。
B. 如果存在NULL值,执行ORDER BY时,如果运行 ORDER BY ... ASC,则NULL值出现在最前面,若运行ORDER BY ... DESC,则NULL值出现在最后面。
12. 模糊查询: 要想找出姓“张”的用户的信息: SELECT * FROM user WHERE userName LIKE '张%';
要想找出姓名以“华”字结尾的用户的信息: SELECT * FROM user WHERE userName LIKE '%华';
要想找出姓名中包含“辉”字的用户的信息: SELECT * FROM user WHERE userName LIKE '%辉%';
要想找出姓名中正好包含4个字符的用户的信息,使用4个“_”模式字符: SELECT * FROM user WHERE userName LIKE '____';
SQL模式匹配允许使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。
13. 统计行数: 要想统计user表中有多少个用户: select count(*) from user;
结果类似:+----------+
| count(*) |
+----------+
| 9 |
+----------+
14. 按分组统计: 要想按“性别”分组来统计用户的数量: SELECT userSex, count(*) FROM user GROUP BY userSex;
结果类似: | userSex | count(*) |
+------------+-----------+
| 女 | 2 |
| 男 | 7 |
15. 多表查询: 要想从两个表中查询出学生姓名和他所在的寝室号: SELECT user.userName,bedroom.roomNum FROM user,bedroom WHERE user.roomId=bedroom.roomId;
结果类似: +---------------+--------------+
| userName | roomNum |
+---------------+--------------+
| 张三 | 1 |
| 李四 | 1 |
| 王五 | 1 |
| 陈五 | 1 |
| 陈七 | 2 |
| 张李杜 | 2 |
| 邓小李 | 2 |
| 刘辉 | 2 |
+---------------+--------------+
(其中bedroom表中的主键roomId作为user表中的外键)
16. 查询最大列: 要想从user表中查询出最大的年龄: SELECT MAX(userAge) FROM user;
结果类似: +--------------------+
| MAX(userAge) |
+--------------------+
| 34 |
+--------------------+
17. 按最大列查询: 要想从user表中查询出年龄最大的用户的信息: SELECT * FROM user WHERE userAge=(SELECT MAX(userAge) FROM user);
结果类似: +---------+---------------+------------+------------+----------+
| userId | userName | userAge | userSex | roomId |
+---------+---------------+------------+------------+----------+
| 6 | 张李杜 | 34 | 女 | 2 |
+---------+---------------+------------+------------+----------+
18. 根据两个键查询: 要想从user表中查询出姓名叫“张三”,且性别为“男”的用户的信息: SELECT * FROM user WHERE userName='张三' AND userSex='男';
结果类似: +---------+---------------+------------+------------+----------+
| userId | userName | userAge | userSex | roomId |
+--------+----------------+------------+------------+----------+
| 1 | 张三 | 20 | 男 | 1 |
+--------+----------------+------------+------------+----------+
要想从user表中查询出姓名叫“陈五”,或性别为“男”的用户的信息: SELECT * FROM user WHERE userName='陈五' OR userSex='男';
结果类似: +---------+----------------+------------+-----------+-----------+
| userId | userName | userAge | userSex | roomId |
+--------+-----------------+------------+-----------+-----------+
| 1 | 张三 | 20 | 男 | 1 |
| 2 | 李四 | 21 | 男 | 1 |
| 3 | 王五 | 22 | 男 | 1 |
| 4 | 陈五 | 21 | 女 | 1 |
| 8 | 刘辉 | 22 | 男 | 2 |
+--------+-----------------+------------+-----------+-----------+
19.字符集和校对规则: MySQL服务器有一个服务器字符集和一个服务器校对规则,它们均不能设置为空。
每一个数据库有一个数据库字符集和一个数据库校对规则,它不能够为空。
如果在CREATE TABLE语句中没有指定表字符集和校对规则,则使用数据库字符集和校对规则作为默认值。它们没有其它目的。
如果在列定义中没有指定列字符集和校对规则,则默认使用表字符集和校对规则。表字符集和校对规则是MySQL的扩展;在标准SQL中没有。
MySQL的数据类型
数据类型: 数值类型、日期/时间类型、字符串类型
几种列类型描述使用了下述惯例:
M: 表示最大显示宽度。最大有效显示宽度是255。
D: 适用于浮点和定点类型,并表示小数点后面的位数。最大可能的值是30,但不应大于M-2。
[ 和 ]: 方括号(‘[’和‘]’)表示可选部分。
1. 数值类型: integer(int)、smallint、decimal(dec)、numeric等
注意: A. MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。
该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。
B. 显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。
如果为一个数值列指定ZEROFILL,MySQL自动为该列添加UNSIGNED属性。
C. decimal和numeric类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据
例如: salary DECIMAL(5,2)
在该例子中,5是精度,2是标度。精度表示保存值的总位数,标度表示小数点后面可以保存的位数。
2.近似数值类型: float、real、double precision
注意: A. 对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。
B. SQL标准允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。
C. MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。
这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。
例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。
MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。
D. MySQL将DOUBLE视为DOUBLE PRECISION(非标准扩展)的同义词。MySQL还将REAL视为DOUBLE PRECISION(非标准扩展)的同义词,
除非SQL服务器模式包括REAL_AS_FLOAT选项。
E. 为了保证最大可能的可移植性,需要使用近似数值数据值存储的代码应使用FLOAT或DOUBLE PRECISION,不规定精度或位数。
3.日期和时间类型: 日期类型: DATETIME、DATE和TIMESTAMP
时间类型: TIME和YEAR
A. DATETIME: 用'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。
支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
B. DATE: 用'YYYY-MM-DD'格式检索和显示DATE值
支持的范围是'1000-01-01'到 '9999-12-31'。
C. TIMESTAMP:TIMESTAMP列类型的属性不固定,取决于MySQL版本和服务器运行的SQL模式。
D. TIME: 用'HH:MM:SS'格式检索和显示TIME值(或对于大的小时值采用'HHH:MM:SS'格式)。
TIME值的范围可以从'-838:59:59'到'838:59:59'。
E. YEAR: 用YYYY格式检索和显示YEAR值。
YEAR值的范围是1901到2155。
注意: 可以指定各种格式的YEAR值:
四位字符串,范围为'1901'到'2155'。
四位数字,范围为1901到2155。
两位字符串,范围为'00'到'99'。'00'到'69'和'70'到'99'范围的值被转换为2000到2069和1970到1999范围的YEAR值。
两位整数,范围为1到99。1到69和70到99范围的值被转换为2001到2069和1970到1999范围的YEAR值。
两位整数范围与两位字符串范围稍有不同,因为你不能直接将零指定为数字并将它解释为2000。
你必须将它指定为一个字符串'0'或'00'或它被解释为0000。
函数返回的结果,其值适合YEAR上下文,例如NOW()。
非法YEAR值,被转换为0000。
4.字符串类型: char和varchar类型
binary和varbinary类型
blob和text类型
enum类型
set类型
char和varchar类型: A. CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数。例如,CHAR(30)可以占用30个字符。
B. CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。
当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。
VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。
C. 同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。
VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
D. 用下面例子说明CHAR和VARCHAR之间的差别:
值 char(4) 存储需求 varchar(4) 存储需求
'' ' ' 4个字节 ‘’ 1个字节
‘ab’ ‘ab ’ 4个字节 ‘ab ’ 3个字节
‘abcd’ ‘abcd’ 4个字节 ‘abcd’ 5个字节
‘abcdefgh’ ‘abcd’ 4个字节 ‘abcd’ 5个字节
binary和varchar类型: A. BINARY和VARBINARY允许的最大长度一样,如同CHAR和VARCHAR,不同的是BINARY和VARBINARY的长度是字节长度而不是字符长度。
blob和text类型: BLOB 列被视为二进制字符串(字节字符串)。TEXT列被视为非二进制字符串(字符字符串)。
BLOB类型: TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
TEXT类型: TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
A. 在大多数方面,可以将BLOB列视为能够足够大的VARBINARY列。同样,可以将TEXT列视为VARCHAR列。
B. 当保存或检索BLOB和TEXT列的值时不删除尾部空格。(这与VARBINARY和VARCHAR列相同)。
enum类型: ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值。
A. 枚举最多可以有65,535个元素。 创建表时,ENUM成员值的尾部空格将自动被删除。
set类型: SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。
A. SET最多可以有64个不同的成员。当创建表时,SET成员值的尾部空格将自动被删除。