SQL语句

目录

常用的数据类型

SQL语句分类

DDL

DML 

DQL

DCL

数据表高级操作

三种删除操作

创建临时表

克隆表

数据库用户管理

数据库用户授权


SQL语句常用于关系型数据库中,用于管理数据库,包括数据查询,数据更新,访问控制,对象管理。(数据库内大小写不敏感 ,以下的出现的中括号表示可有可无,具体情况,具体使用)  


常用的数据类型

int:                整型                        用于定义整数类型的数据
float:             单精度浮点4字节32位        准确表示到小数点后六位        
double:         双精度浮点8字节64位
char:             固定长度的字符类型        用于定义字符类型数据。 20字节  4 
varchar:        可变长度的字符类型                               20   4 
text:              文本
image:          图片
decimal(5,2):5个有效长度数字,小数点后面有2位        指定长度数组 

auto_increment  自增
Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错


SQL语句分类

查看数据库  show databases;     

查看数据表  show tables;

显示表结构  descride(desc 即可) 表名;


DDL

DDL 数据定义语言--用于创建删除数据库,表

create database  库名;           创建数据库

drop database  库名;              删除库

use 库名;                                使用库 (想要使用库内的表,要先使用库)

例:10ce0b1291744ba88d30b8ea9bf303be.png

cc47c320e89946f2bb1963ec8b4bf6d8.png

ff5417416c7b47829c3c809bc36a3b55.png


create table 表名 (字段1 数据类型,字段2 数据类型, ..... [primary key (主键名) ] );  创建表 

drop table 表名; 删除表

创建表常用的选项

not null 不能为空

default ' ' 默认值为空 

primary key 唯一且非空键 (主键 一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。

unique key 唯一键   唯一,但可以为空,空值只允许出现一次

例:8524783f129b439792f79fd33e4fa6c9.png

774b96f641574710870eb63b3a9d356e.png


DML 

DML 数据操作语言--管理表中的记录,常用于对表中的数据进行管理,包括插入,删除,修改表中的数据

insert into 表名 (字段1,字段2,...) values(字段1的值,字段2的值,....); 

insert into 表名   values(字段1的值,字段2的值,....);   

这种写法省略了前面的字段,但后面的值需要一一对应。

插入数据 

例:   

字符型数据要用引号引起来

0f66cf3b18cd4829b3d855eb4e8b85b5.png

9d1bb16385cf44a989e0469c8f5d2df2.png


update 表名 set 字段1=字段值,[....] [where 条件表达式]; 

修改,如果后面没有条件,默认修改所以数据,如果还有别的条件,可以在where后面在跟上条件

94b9de76bc1549de9a1510c748a87865.png

0e7ef7192f4b4548be905660caac4644.png


delete from 表名[where 条件表达式]   

删除,如果后面不跟条件,默认删除所有数据(此种方式删除数据,可以找回)

例:68d4264f118544859e53996826d83215.png

a193b8f7b3734f43ac611c58b76f9ca6.png


DQL

DQL 数据查询语言--查询不会影响到表内的数据

select 字段1,字段2,... from 表名 [where 条件表达式]; 查询数据

例:

2af7f94dbca84c34bae5793f4ed4018b.png

0a8c86581fe34128ba22b5556431fad7.png


DCL

DCL 数据控制语言--修改表名和表的结构

alter table 旧表名 rename 新表名;  修改表名

alter table 表名 ADD  新字段名 字段类型  [default ''];     添加字段

alter table  表名 CHANGE 旧字段名  新字段名 字段类型; 

修改字段(CHANGE可修改字段名、数据类型、约束等所有项。注意,修改时不能使用一些保留字, 如add 不然报错

ALTER TABLE 表名 modify column 字段名 字段类型;(谨慎修改类型,可能会导致原有数据出错,不建议使用)

alter table 表名 drop 字段名; 删除字段

2d5b160b5bae4bd7994acf4e42b485fd.png

25667d49b7f147ccbcf3b34805ed72ab.png
7930c4e945174633aa81399f75a71ed7.png

fcc9050269ed40dd9f92e91575f18b3b.png


数据表高级操作

三种删除操作

delete from 表名[where 条件表达式];

此种方式删除数据,可以回滚(恢复), 且只删除数据,不会删除结构,删除速度慢

DELETE 工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除
所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录

truncate table 表名 [where 条件表达式];

此种方式删除数据,无法回滚,且只删除数据,不会删除结构,删除速度块

TRUNCATE清空表后,没有返回被删除的条目: TRUNCATE 工作时是将表结构按原样重新建立,
因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE 清空表内数据后,
ID会从1开始重新记录

drop table 表名;

此种方式会删除掉表结构和内容,无法回滚,删除速度快,直接将整个表删除掉。

不再需要一张表的时候,用drop 想删除部分数据行时候,用delete,并且带上where子句
保留表而删除所有数据的时候用truncate

建议平时还是使用 delete删除


创建临时表

create temporary table 表名 (字段1 字段类型,字段2 字段类型,... primary key (主键名));

临时表无法使用 show tables 查看 ,可以使用select查看 由于临时表是放在内存中,退出连接后便会消失。


克隆表

方式1

create table 克隆表名 like  被克隆的表名;

insert into  克隆表名 select * from 被克隆的表名;

 方式2

create table 克隆表名(select * from 被克隆的表名);

方式1和方式2之间的区别: 方式1会把表的结构索引等也克隆下来,方式2只会把数据克隆下来,不会克隆结构索引等


数据库用户管理

新建用户

create user '用户名'@'来源地址' [identified by [password] '密码'];

'用户名':指定将创建的用户名.
'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录  可用通配符%
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
若使用加密密码,需要先使用SELECT PASSWORD('密码');获取密文,再在语句中添PASSWORD '密文';
若省略“IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)

查看用户信息

use mysql;  (用户信息存放在此数据库中)

select user,authentication_string,host from user;  (查看用户信息)

更改用户名称

rename user '旧名称'@'来源地址' to '新名称'@'来源地址';

删除用户

drop user '用户名称'@'来源地址'

修改当前密码

set password = password('要修改的密码');

修改其他用户密码

set password for '用户名'@'来源地址' = password ('要修改的密码');

忘记root密码的解决办法

修改/etc/my.cnf 配置文件,免密登陆mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables    添加,使登录mysql不使用授权表

systemctl restart mysqld
mysql    直接登录

然后使用SQL语句修改密码
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('新密码') where user='root';

FLUSH PRIVILEGES; 刷新权限
quit
mysql -u root -p新密码;

最后再把/etc/my.cnf 配置文件里的skip-grant-tables 删除,不需要重新启动mysql


数据库用户授权

grant 授权

grant 权限1,权限2,.... on 数据库名.表名 to '用户名'@'来源地址'   [identified by '密码']  ;

flush privileges;  刷新权限

权限列表 (可以给的权限 多个权限以 , 分隔 如果想要给全部权限 使用 all) 

insert(插入数据)
select (查询数据)
update (更新表的数据)
delete(删除表中数据)
create (创建库,表)
drop(删除库,表)
refernces
index(建立索引)
alter(更改表属性)
create temp orary tableslock tables (锁表)
execute
create view (创建视图)
show view(显示视图)
create routine(创建存储过程)
alter routine(修改存储过程)
event(事件)
trigger on(创建触发器)

数据库名.表名 表示 某个库下的某张表,可以使用通配符 *    *.* 表示任意库和任意表    具体库名.*  表示当前库下的所以表

'用户名'@'来源地址' 用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.abc.com"、“192.168.91.%”等。

IDENTIFIED BY  用于设置用户连接数据库时所使用的密码字符串。
在新建用户时,若省略“IDENTIFIED BY"部分,则用户的密码将为空,建议设置密码,保障安全性

查看权限

show grands for '用户名'@'来源地址';

撤销权限  也可以使用 all

revoke 权限1,权限2,...  on 数据库名.表名  from 用户名@来源地址;


远端登录数据库

  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值