@ [TOC](MySQL学习)
#一,管理MySQL
的mysqld --console
2. 关闭中mysqladmin -uroot关机
ps -ef | grep的mysqld的
2. 启动服务器:``javascript
root @ host#cd / usr / bin 。/ mysqld_safe &```
使用数据库名```
2. 查看所有数据库
“``javascript
mysql > 显示 数据库; ```
3. 显示指定数据库的所有表:
```javascript
mysql> use 数据库名;
Database changed
mysql> SHOW TABLES;
mysql> SHOW TABLE STATUS FROM RUNOOB; # 显示数据库 RUNOOB 中所有表的信息
mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'; # 表名以runoob开头的表的信息
mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'\G; # 加上 \G,查询结果按列打印
1.添加MySQL用户需在mysql的user表中添加:用户名,密码,SELECT,INSERT,UPDATE。(SELECT,INSERT,UPDATE为N/Y)
root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed
mysql> INSERT INTO user
(host, user, authentication_string,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'username01',
MD5('pw123456'), 'Y', 'Y', 'Y');
// 刷新MySQL的系统权限,使修改立即生效
mysql> FLUSH PRIVILEGES;
// 查询用户
mysql> SELECT host, user, password FROM user WHERE user = 'username01';
2.给指定数据库添加用户user02,密码123456
root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO 'user02'@'localhost'
-> IDENTIFIED BY '123456';
相关用户权限设置:
权限名称 |
---|
host |
user |
authentication_string |
Select_priv |
Insert_priv |
Update_priv |
Create_priv |
Drop_priv |
Shutdown_priv |
File_priv |
Grant_priv |
References_priv |
Index_priv |
Alter_priv |
# -*- coding: UTF-8 -*-
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost", "用户名", "密码", "数据库", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL语句
sql = """
SQL语句
"""
try:
# 使用execute方法执行SQL语句
cursor.execute(sql )
# 提交到数据库执行
db.commit()
except:
# 回滚,以防出现任何错误
db.rollback()
# 使用 fetchone() 方法获取一条数据
data = cursor.fetchone()
# 使用 fetchall() 方法获取多条数据
data = cursor.fetchall()
print(data)
# 关闭数据库连接
db.close()
CREATE DATABASE 数据库名;
show databases;
mysql> drop database <数据库名>;
在终端删除数据库
[root@host]# mysqladmin -u root -p drop 数据库名
Enter password:******
CREATE TABLE IF NOT EXISTS `表名`(
`列名` 类型 属性,
...
PRIMARY KEY ( `列名` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 如:
CREATE TABLE IF NOT EXISTS `表名`(
`runoob_id` INT UNSIGNED 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;
use 数据库名;
show tables;
DROP TABLE 数据表;
# 使用 rename
alter table table_name rename to new_table_name;
SHOW COLUMNS FROM 数据表;
SHOW INDEX FROM 数据表;
insert into 表名( 字段名1, 字段名2,...字段名N )
VALUES
( value1, value2,...valueN );
select column_name,column_name
from 表名
[where Clause]
[limit N][ offset M]
update 表名 set field1=new-value1, field2=new-value2
[WHERE Clause]
select * from 表名 where 条件
delete from table_name [WHERE Clause]
%字符表示任意字符
select field01,... from field01 like condition1 [AND [OR]] filed01 = '%SQL%'
union 连接多个select语句,并去除重复数据。
all 返回所有数据(包括重复数据),distinct 删除重复数据。
select expression1 from tables [WHERE conditions]
union [all| distinct]
select expression1 from tables [WHERE conditions];
ASC 升序,DESC降序,默认 ASC
select field1,field2,.. FROM table_name1,table_name2,..
order by field1 [ASC [DESC]], [field2...] [ASC [DESC]]
select column_name, function(column_name)
from table_name
where column_name operator value
group by column_name;
with rollup 实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
coalesce 取代 “NULL”,
a == null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null。
select coalesce(name, '总数'), SUM(singin) as singin_count from employee_tbl group by name with rollup
(内连接,或等值连接):获取两个表中字段匹配关系的记录。
SELECT a.column_id, a.column_author, b.column_count FROM
table01 a INNER JOIN table02 b
ON a.column_author = b.column_author;
使用where 子句也能实现该效果
SELECT a.column_id, a.column_author, b.column_count
FROM table01 a, table02 b
WHERE a.column_author = b.column_author;
获取左表所有记录,即使右表没有对应匹配的记录。
SELECT a.column_id, a.column_author, b.column_count
FROM table01 a LEFT JOIN table02 b
ON a.column_author = b.column_author;
用于获取右表所有记录,即使左
SELECT a.column_id, a.column_author, b.column_count
FROM table01 a RIGHT JOIN table02 b
ON a.column_author = b.column_author;
当列的值是NULL,此运算符返回true。
select * from tableName where columnName1 is null;
当列的值不为NULL,运算符返回true。
select * from tableName where columnName1 is not null;
比较操作符(变量=运算符),当比较器的两个值都为NULL时返回true。
表没有对应匹配的记录。
注意:
select * , columnName1+ifnull(columnName2,0) from tableName;
columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。
SELECT name FROM tableName1 WHERE name REGEXP '正则表达式';
begin 或 start transaction | 开启事务 |
commit | 提交事务 |
rollback | 事务回滚,撤销正在进行的所有未提交的修改; |
savepoint identifier | savepoint 在事务中创建一个保存点; |
release savepoint identifier | 删除一个事务的保存点 |
rollback to identifier | 把事务回滚到标记点; |
set transaction | 设置事务的隔离级别 |
set transaction 设置事务的隔离级别:
读取未提交 | read uncommitted |
---|---|
读取已提交 | 读取已提交 |
可重复读取 | repeatable read |
可序列化 | serializable |
begin; # 开始事务
# 需执行的语句
insert into ...
insert into ...
commit; # 提交事务
# 声明一个 savepoint保留点
SAVEPOINT savepoint_name;
# 回滚到savepoint
ROLLBACK TO savepoint_name;
# 删除保存点
release savepoint savepoint_name;
# drop 删除column_name字段
alter table table_name drop column_name;
# add 添加column_name字段
alter table table_name add column_name int [ first [after column_name]];
# 1. first 设定在第一列,2. after 字段名 (设定在该字段名之后)
# modify 修改column_name字段类型
alter table table_name modify column_name char(20);
# change 修改字段:alter table 表名 change 需修改的列名 修改后 类型 [属性];
alter table table_name change column_name01 column_name02 int;
# 修改字段默认值
alter table table_name alter column_name set default value_01;
# 删除字段的默认值
alter table table_name alter column_name drop default;