Mysql

数据管理

设置root用户

mysqladmin -u root password ********

登录数据库

mysql (-h localhost 可选,可以连接远程服务器) -u 用户名 -p

使用数据库

USE DATABASE

显示所有数据库

SHOW DATABASES

创建数据库

CREATE DATABASE database_name

删除数据库

DROP DATABASE database_name

重命名数据库

RENAME DATABASE old_database_name TO  new_database_name

注意 mysql 没有这个功能

数据类型

integer(size) int(size) smallint(size) tinyint(size)   整型数据

decimal(size,d) numeric(size,d)                        浮点数据

char(size)                                             固定字符串

varchar(size)                                          可变字符串

date(yymmdd)                                           日期

char 与 varchar : char会分配固定长度,varchar会分配小于规定长度的任意长度

decimal 与 numeric 相同 decimal(10,4)表示的是最大可达十位(包含小数),小数四位

创建表

CREATE TABLE table_name (

列名称1 数据类型,

列名称2 数据类型,

...

);

处理表的命令

查看表结构

DESCRIBE table_name

删除表

DROP TABLE table_name

重命名表名

ALTER TABLE old_table_name RENAME new_table_name

向表中添加一列

ALTER TABLE table_name ADD column_name 数据类型

删除表中的一列

ALTER TABLE table_name DROP COLUMN column_name

修改一列的数据类型

ALTER TABLE table_name MODIFY column_name 数据类型

重命名一个列

ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name 数据类型

插入数据

INSERT INTO table_name VALUES (值1,值2,...)

INSERT INTO table_name ( 列1,列2)  VALUES ( 值1,值2)

查询数据

SELECT * FROM table_name

SELECT column1,column2 FROM table_name

条件查询

SELECT * FROM table_name WHERE 条件

=        等于

<>       不等于

>        大于

<        小于

>=       大于等于

<=       小于等于

BETWEEN  在某个范围之间

LIKE     某种搜索模式

AND      与

OR       或

BETWEEN

SELECT * FROM user WHERE id BETWEEN 5 AND 7;

查询id为5、6,7的user,userId范围是包含边界值的

NOT  BETWEEN 的范围是不包含边界值

LIKE

% 匹配任意类型和长度的字符

_ 匹配单个任意字符

SELECT * FROM user WHERE u_name LIKE ‘%三_'

删除操作

DELETE FROM table_name WHERE 条件

DELETE * FROM table_name

更新数据

UPDATE table_name SET column = new_value WHERE 条件

清除重复项

SELECT DISTINCT * FROM table_name

排序

SELECT * FORM table_name ORDER BY column_name       默认升序

SELECT * FROM table_name ORDER BY column_name DESC  降序

用户管理

创建用户

CREATE USER user_name IDENTIFIED BY password   创建后需要给权限

删除用户

DROP USER user_name

重命名用户

RENAME USER old_user_name TO new_user_name

修改当前密码

SET PASSWORD = PASSWORD(new_password)

修改用户密码

SET PASSWORD FOR user_name = PASSWORD(new_password)

用户权限管理

*.*                          全局层级

database_name.*              数据库层级

database_name.table_name     表层级

                             列层级

                             子程序层级

授予用户权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY password    root用户默认只能本地连接,这里可以远程连接.


%                                 所有远程主机

www.example.com/192.168.1.1       精确主机或IP地址

*.example.com                     通配符'*'

192.168.1.0/255.255.255.0         指定一个网段

删除用户权限

REVOKE ALL PRIVILEGES FROM user_name

数据备份

mysqldump -u root -p password database_name > backup.sql  备份

mysqldump -u root -p password database_name < backup.sql  恢复

编码

查看mysql支持编码

SHOW CHARACTER SET

SHOW VARIABLES LIKE 'character_set%'

SHOW VARIABLES LIKE 'collation%'

设置数据库编码

CREATE DATABASE database_name DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci

修改数据库编码

ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci

sql注入

表结构 id name      password
表数据 1  test_name test_password

select * from where name = 'test_name' and password = 'test_password'

注入

'test_name' 替换为 'or 1 = 1 #'

用 or 1 = 1 保持查询永真 
用# 注释后面的内容

连表查询

读取共有的数据
ELECT a.id, a.name, b.id FROM user a INNER JOIN table1 b ON a.id = b.user_id;

读取a的所有数据
ELECT a.id, a.name, b.id FROM user a LEFT JOIN table1 b ON a.id = b.user_id;

读取b的所有数据
ELECT a.id, a.name, b.id FROM user a RIGHT JOIN table1 b ON a.id = b.user_id;

** 查询值为 null **

查不出来, name = null 永远为 false
select * from user where name = null;

可以查出 name 等于 null 的user
select * from user where name is null;

可以查出 name 不是 null 的user
select * from user where name is not null;

** 索引 **

唯一 且 不能为null
alter table 'table_name' add primary key (column_name);

唯一 可以为 null
alter table 'table_name' add unique (column_name);

普通索引,可以重复
alter table 'table_name' add index (column_name);

全文索引
alter table 'table_name' add fulltext (column_name);