MySQL登录
(1)利用TCP/IP连接,客户端和服务端可以在不同的机器上
1 | mysql -h12.45.23.41 -uwahaha -p |
然后输入用户密码,若无密码,直接回车即可。
(2)利用Unix域套接字来连接,客户端和服务端要在同一台机器上
1 | mysql -S /var/lib/mysql/mysql.sock -uroot -p |
查看基础信息
1 | show databases; /*查看所有数据库*/ |
查看MySQL的版本信息
有如下几种方法:
(1)直接执行mysql -V
(2)执行mysqladmin -V
(3)登录MySQL后,在命令提示符上执行status命令
1 | mysql> status; |
(4)在MySQL的命令提示符中使用version函数
1 | mysql> select version(); |
获取数据库元数据
1 | select version(); /*获取mysql服务器版本信息*/ |
一些常用的操作命令
(1)数据库的定义和删除
1 | drop database `some_database`; /*删除some_database数据库*/ |
(2)数据表的定义和删除
1 | drop table `some_table`; /*删除指定表*/ |
(3)数据表的名称或字段修改(alter)
1 | alter table testalter_tbl drop age; /*删除字段age*/ |
(4)插入记录(insert)
1 | insert into runoob_tbl (title, author, date_t) values ("学习MySQL", "wahaha", NOW()); |
(5)数据查询(select)
1 | select * from some_table; /*查询数据库表中所有内容*/ |
(6)更新记录(update)
1 | update some_table set title='学习MySQL' where author='wahaha'; |
备注:若update语句后面不带条件,即不带where子句,那么update语句将修改该数据库表some_table中的所有记录。
(7)删除记录(delete)
1 | delete from some_table where author='wahaha'; /*按条件删除记录*/ |
delete和truncate语句都可以删除表中记录。delete配合where子句可以删除符合条件的记录,但是truncate只能删除表中所有的记录。delete删除记录的操作是可回滚的,而truncate删除的记录是不可以回滚的。truncate删除记录的效率要高于delete语句。delete和truncate语句都不删除表的定义,但是drop table语句会删除表的定义。
如果一个表中有自增字段,使用truncate table some_table和没有where子句的delete from some_table删除所有记录后,这个自增字段将起始值恢复成1。如果你不想这样做的话,可以在delete语句中加上永真的where子句,如where 1或where true。
(8)where子句
where子句用于有条件地从表中选取数据。where子句也可以运用于SQL的select/delete/update命令。另外可以使用and或or关键字指定一个或多个条件。
1 | select * from some_table where id='12' and author='wahaha'; |
(9)where子句中嵌套like子句
SQL like子句中使用百分号%字符来表示任意字符,类似于UNIX或正则表达式中的星号*。 如果没有使用百分号%,like子句与等号=的效果是一样的。如下为查找author字段以haha为结尾的所有记录:
1 | select * from some_table where author like '%haha'; |
(10)对结果集排序order by子句
1 | select * from some_table order by id; |
备注:asc表示将查询结果集按升序排列,desc表示将查询结果集按降序排列。如果order by子句不指明asc或desc,那默认的是asc,即升序排列。
(11)分组group by子句
mysql中可使用group by子句对记录行进行分组。select子句中的列名必须为分组列或列函数。列函数对于group by子句定义的每个组各返回一个结果。举例来说:
1 | select name,count(*) from employee_tbl group by name; |
(12)limit | offset子句
select _column,_column from _table [where Clause] [limit N][offset M]
说明如下:
limit N表示返回前N条记录
offset M表示跳过M条记录,从第M条记录开始
limit N offset M表示从第M条记录开始, 返回N条记录
limit M, N等价于limit N offset M
limit | offset一个重要用途就是实现MySQL查询分页功能:
1 | select * from _table limit (page_number-1)*lines_perpage, lines_perpage; //写法一 |
MySQL NULL值处理
mysql使用select命令及where子句来读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令可能就无法正常工作。 为了处理这种情况,mysql提供了两种运算符:
IS NULL #当列的值是NULL,此运算符返回true
IS NOT NULL #当列的值不为NULL,此运算符返回true
举例来说,如下:
1 | select * from runoob_test_tbl where runoob_count IS NULL; |
MySQL中使用正则表达式
1 | select name from person_tbl where name regexp '^st'; /*查询name字段以st开头的记录*/ |
SQL文件的执行方式
可以将sql语句编写到*.sql文件中,执行方法有如下几种:
(1)
1 | ./mysql -h11.23.43.34 -uwahaha -phehe123 < *.sql |
或直接将sql语句写入终端中:
1 | mysql -h11.23.43.34 -uwahaha -p -Ddatabase_name -e "select * from some_table" |
(2)客户端连接后
1 | mysql>source sql文件的绝对路径 |
(3)客户端连接后
1 | mysql>/. sql文件的绝对路径 |
perror工具的使用
当使用mysql过程中出现错误,返回了错误码error_code,可以使用mysql安装的bin目录下perror工具来查看具体错误的含义。例如:
1 | [work@hostname bin]$ ./perror 111 |