MySQL基础回顾

1、数据库操作

以root用户名登录数据库:mysql -uroot -p,之后会提示输入密码

# 显示数据库列表
show databases;

# 切换到demo数据库
use demo;

# 修改密码,通过IDENTIFIED BY指定用户的登录密码
ALTER USER 'root'@ 'localhost' IDENTIFIED BY 'Mysql1234!';

# 创建用户
CREATE USER 'work'@ '%' IDENTIFIED BY 'work1234';

# 重命名用户:
rename user 'test3'@ '%' to 'test1'@ '%'# 修改密码:
set password for 'root'@ 'localhost'=password('123456');

# 删除用户:
drop user 'test'@ 'localhost';

# 以上操作修改后需要刷新才会生效:
flush privileges;

为用户分配权限:

GRANT ALL PRIVILEGES ON  *.*  TO  'root'@ '%'  WITH GRANT OPTION;
  • ALL PRIVILEGES:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限
  • ON:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库、所有表。如果要指定将权限应用到test库的user表中,可以这么写:test.user
  • TO:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”yangxin”@”192.168.0.%”,表示yangxin这个用户只能在192.168.0IP段登录
  • WITH GRANT OPTION:表示允许用户将自己的权限授权给其它用户

SQL语言共分为四大类:

  1. 数据查询语言DQL:由SELECT子句,FROM子句,WHERE子句组成的查询块
  2. 数据操纵语言DML:主要有三种形式,插入INSERT,更新UPDATE, 删除DELETE
  3. 数据定义语言DDL:用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:CREATE TABLE/CLUSTER
  4. 数据控制语言DCL:用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。如: GRANT授权、ROLLBACK回滚。

2、配置文件my.ini

一些基本设置如下:

# 数据库监听端口
port=3306

# 安装位置
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"

# 数据存储位置
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

# 默认字符集
character-set-server=gbk

# 默认存储引擎
default-storage-engine=INNODB

# 不区分表名称大小写
lower_case_table_names=1

FEDERATED存储引擎

开启该引擎后,可以在本地构建一个federated表来连接远程数据表,配置好了之后本地表的数据可以直接跟远程数据表同步。实际上这个表里面是不真实存放数据的,所需要的数据都在远程MySQL服务器上。

在配置文件中添加federated即可开启该引擎

接着,在建表的时候添加sql语句ENGINE=Federated 和 CONNECTION=‘mysql://[username]:[password]@127.0.0.1:3306/dbtestA/tabletestA’;

create table remote_tabletestA(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT)
ENGINE=FEDERATED 
CONNECTION='mysql://test:123456@127.0.0.1:3306/dbtestA/tabletestA';

新建出来的表就是链接到了127.0.0.1:3306/dbtestA/tabletestA这个表,本身只是一个空壳,只能进行数据的增删改查操作,不能改变链接到的表的表结构,如果改变自身的表结构会出现意想不到的错误。

慢查询
在执行某些sql语句会花费大量的时间,我们可以将这些执行较慢的语句记录下来从而分析和改进查询效率,在my.ini中设置慢查询如下

# 是否开启慢查询日志,1表示开启,0表示关闭。
slow_query_log = 1

# mysql5.6以上为slow-query-log-file
# 慢查询日志存储路径,默认文件host_name-slow.log
log-slow-queries = C:\ProgramData\MySQL\MySQL Server 5.5\data\slow-query.log

# 慢查询阈值,当查询时间多于设定的阈值时,记录日志,默认为10s。
long_query_time=5

3、 修改数据表

添加一列:可以指定新列的位置关系,位于最开头(FIRST)或者位于某列之后(AFTER…),否则新列默认位于最后。

ALTER TABLE tab_name ADD col_name  column_defi[FIRST|AFTER col_name];
#添加多列
ALTER TABLE tab_name ADD(col_name1  column_defi1,col_name2  column_defi2...);

删除一列:删除多列或者删除之后再新增一列,只需在DROP col_name之后加逗号,再写DROP/ADD。

ALTER TABLE tab_name DROP col_name;

添加约束:其中primary key可以替换为其他约束UNIQUE、FOREIGN KEY、CHECK(col>16),默认约束为SET DEFAULT。

ALTER TABLE tab_name ADD [ CONSTRAINT constraint_name ] PRIMARY KEY (index_column);

#删除约束:
ALTER TABLE tab_name DROP {INDEX|KEY} index_name;
# 删除外键fkey_name
ALTER TABLE tab_name DROP FOREIGN KEY fkey_name;

可以通过建表语句查看表的约束,

show create table tab_name;
# 例如约束如下 
CONSTRAINT `users_ibfk_1` FOREIGN KEY (`pid`) REFERENCES foreign_tab(f_id);
#修改列定义:
ALTER TABLE tab_name MODIFY col_name col_defi;

#修改列名称:
ALTER TABLE tab_name CHANGE old_colname new_name col_defi;

# 修改数据表名称:
RENAME TABLE old_name TO new_name;

# 删除表内所有数据,操作不可回滚
TRUNCATE tab_name;

#删除整个表结构:
DROP tab_name;

4、 增删改查

插入记录:

# 1、列名可选,如果不设置列名,默认为对每一列都插入。
INSERT INTO tab_name[(col_name)] VALUES (val1,val2...);

# 2、以键值对的形式插入
INSERT tab_name SET col_name=val...

# 3、将查询结果插入数据表
INSERT tab_name select…,。

删除记录:删除满足条件的记录,如不填where,全删。

DELETE FROM tab_name [WHERE condition];

更新记录:where条件如果不填,默认对所有记录进行更新。

UPDATE tab_name SET col_name=val [WHERE condition];

还可以使用REPLACE对数据表进行更新,如果数据的主键不存在则直接插入,若主键已存在,则删除该主键记录并插入,这时该操作返回的影响行数为2

值得注意的是在使用主从数据库同步时,对于replace操作,生成binlog时会生成delete和insert两个事件而非一个update事件,因此从数据库在没有同步删除操作的话就会只执行insert,这时就会造成主键冲突。

REPLACE INTO users (id,name,age) VALUES(123, ‘小曾’, 50);

查询记录:

SELECT col_name1,col_name2... /*选择需要查询的列名*/

FROM tab_name/*选择需要查询的数据表*/

WHERE condition/*查询条件*/

GROUP BY col_name [ASC|DESC]/*查询结果分组*/

HAVING condition/*对查询分组进行筛选*/

ORDER BY col_name[asc|desc]/*对查询结果经行排序*/

LIMIT [n1,]n2/*返回从n1开始的n2条结果,不填n1默认从开头返回*/

5、 子查询

父查询与子查询的连接由比较符号连接,子查询返回多个结果时还可以由ANY、ALL对结果进行修饰。

多表更新:参照另外一个表来更新本表。

内连接:INNERJOIN ON join_condition,返回左右两表中满足条件的项。

左外连接:LEFTJOIN ON join_condition,返回左表全部与右表中满足条件的项。

左外连接: RIGHT JOIN ON join_condition,返回右表全部与左表中满足条件的项。

6、 数据库函数

函数功能
CONCAT(’a’,’b’…)连接a,b多个字符串
CONCAT_WS(’s’,’a’,’b’…)以s为连接符连接多个字符串
FORMAT(f,n)以n位小数显示数字f
LOWER()/UPPER()将内容转换为小/大写
LEFT/RIGHT(‘s’,n)获取字符串左边/右边前n个字符
LENGTH()获取字符串长度
LTRIM/RTRIM/TRIM()去除字符串左边/右边/两边空格
REPLACE(‘s’,’a’,’b’)将字符串s中的a字符替换为b
SUBSTRING(’s’,n,e)截取字符串从第n位开始的e个字符
IS NULL判空
n IN(a,b,c…)判断n是否在列出的值中
n BETWEEN a AND b判断n是否在a到b之间

COUNT(列名)—返回指定列的记录数,忽略列值为NULL的记录

SELECT COUNT(id) FROM ais_dynamic WHERE id>1000;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值