MySQL(上)
管理用户
添加MySQL用户:在mysql数据库的user表中添加新用户/GRANT命令
use 数据库名;
使用该命令后的所有命令都只针对该数据库
show databases;
列出数据库列表
show tables;
之前要先用use命令,显示指定数据库的所有表
show columns from 数据表;
显示数据表属性,属性类型,主键信息,是否为null,默认值等其它信息
show index from 数据表;
show table status like [from db_name][like 'pattern']\G;
MySQL PHP语法
mysqli_connect(connect, "SQL 语句");
mysqli_select_db($connect, '数据库名');
mysqli_fetch_array();
mysqli_close();
MySQL连接
1.命令行
[root@host]# mysql -u root -p
2.PHP
mysqli_connect(host, username, password, dbname, port, socket);
host:主机名/ip地址
创建数据库
create database 数据库名;
删除数据库
drop database 数据库名;
数据类型
一,数值
TINYINT, SMALLINT, MEDIUMINT, INT, BIGHT, FLOAT, DOUBLE, DECIMAL
二,日期和时间
DATA, TIME, YEAR, DATATIME, TIMESTAMP
三,字符串
CHAR, VARCHAR, TINYBLOB, TINYTEXT, BLOB, TEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB, LONGTEXT
创建数据表
create table table_name(colume_name colume_type);
e.g.
create tabel if not exist runoob_tbl
(
runoob_id
INT UNSIGNED AUTO_INCREMENT,
runoob_title
VARCHAR(100) NOT NULL,
runoob_author
VARCHAR(40) NOT NULL,
submission_data
DATA,
PRIMARY KEY (runoob_id
)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
engine设置存储引擎
mysql> CREATE TABLE runoob_tbl(
-> runoob_id INT NOT NULL AUTO_INCREMENT,
-> runoob_title VARCHAR(100) NOT NULL,
-> runoob_author VARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY ( runoob_id )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
显示数据表信息
desc table_name;
删除数据表
drop table table_name;
插入数据
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
字符型数据要用单引号或双引号
e.g.
mysql> INSERT INTO runoob_tbl
-> (runoob_title, runoob_author, submission_date)
-> VALUES
-> ("学习 PHP", "菜鸟教程", NOW());
PHP中对于含有中文的数据插入,需要添加 mysqli_query($conn , "set names utf8"); 语句
插入多条数据
INSERT INTO table_name (field1, field2,...fieldN) VALUES (valueA1,valueA2,...valueAN),(valueB1,valueB2,...valueBN),(valueC1,valueC2,...valueCN)......;
如果所有的列都要添加数据可以不规定列进行添加数据:
mysql> INSERT INTO runoob_tbl
-> VALUES
-> (0, "JAVA 教程", "RUNOOB.COM", '2016-05-06');
如果添加过主键自增(PRINARY KEY AUTO_INCREMENT)第一列在增加数据的时候,可以写为0或者null,这样添加数据可以自增, 从而可以添加全部数据,而不用特意规定那几列添加数据。
显示表中所有数据
select * from table_name;
MySQL查询数据
select column_name, column_name
from table_name
[where clause]
[limit N][offset M]
可使用多个表,表之间用逗号分隔
limit属性设定返回的记录数
用offset指定select语句开始查询的数据偏移量,默认为0
MySQL WHERE子句
where condition1 [AND[OR]] condition2...
操作符:=, <>/!=, >, <, >=, <=
字符串比较默认不区分大小写
若想区分
where binary condition
select->where->group by->having->order by
MySQL UPDATE更新
update table_name set field1=new_value1, field2=new_value2 [where clause]
MySQL DELETE语句
DELETE FROM table_name [WHERE Clause]
MySQL LIKE子句
用%来表示任意字符
where field1 like condition
e.g. where runoob_author like '%com'
MySQL UNION操作符
连接两个以上的select语句的结果组合到一个结果集合中,多个select语句可删除重复数据
select...
union [all|distinct] //all包含重复数据 distinct删除重复数据(默认)
select...
MySQL 排序
order by子句对select的结果进行排序
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
e.g. SELECT * from runoob_tbl ORDER BY submission_date ASC;
MySQL GROUP BY语句
根据一个或多个列对结果集进行分组,在分组的列上可以使用COUNT,SUM,AVG等函数
空值在任何聚集操作中都被忽视
select column_name, function(column_name)
from table_name
where ...
group by column_name;
e.g. select name, count(*) from employee_tbl group by name;
使用with rollup可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT...)
比如说分组sum了之后,在对sum后得到的结果们进行sum
e.g. select name, sum(signin) as signin_count from employee_tbl group by name with rollup;
默认情况下这条最终的sum记录除了用于sum的那列,其它列会是null
可使用coalesce来取代null
select coalesce(a,b,c);
如果a==num则选择b,如果b==null则选择c
e.g. select coalesce(name, '总数'), sum(signin) as signin_count from employee_tbl group by name with rollup;
group by对R进行分组,having对分组进行筛选,再把select的投影应用到筛选后的每个分组上
不需要分组就可以判定的条件写在where中,否则写在having中
MySQL 连接的使用
在select,update,delete语句中使用Mysql的join来联合多表查询
inner join 获取两个表中字段匹配的记录
left join 获取左表的所有记录,即使右表没有对应匹配的记录
right join
e.g.
select a.runoob_id, a.runoob_author, b.runoob_count
from runoob_tbl a
inner join tcount_tbl b
on a.runoob_author=b.runoob_author;
等价于
select a.runoob_id, a.runoob_author, b.runoob_count
from runoob_tbl a, tcount_tbl b
where a.runoob_author=b.runoob_author;
NULL值处理
is null
is not null
<=> 当比较的两个值为null时返回true
不能使用=null或!=null在列中查找null值,null与任何值比较都返回false
select , columnName1+ifnull(columnName2, 0) from tablename;
当columnName2的值为null时会转化为0进行运算
e.g. select from runoob_test_tbl where runoob_count is null;
MySQL正则表达式
用于REGEXP操作符中
^ 字符串开始位置
$ 字符串结束位置
. 匹配除"\n"之外的任何单个字符,要包括"\n"的话使用[.\n]
[...] 字符集合,匹配所包含的任意一个字符
[^...] 匹配未包含的任意字符
p1|p2|p3 匹配p1或p2或p3
{n} n>=0,匹配确定的n次,"o{2}"匹配"oo"
{n,m}最少匹配n次最多匹配m次
- 匹配前面的子表达式零次或多次,等价于{0,}
e.g.
where name regexp '^st'; name以st开头
where name regexp 'ok'; name以元音字符开头或以ok结尾
- 等价于{1,}