建设网站的实验目的,北京卓天下网站建设公司,网站开发使用软件环境硬件环境,怎样推广网站目录
一、数据库的基础操作
1、数据库的基本查看和切换
1.1 查看数据库信息
1.2 切换数据库
1.3 查看数据库中的表信息
1.4 查看数据库或数据库中表的结构#xff08;字段#xff09;
1.5 数据类型
1.5.1 整数型
1.5.2 浮点型(float和double)
1.5.3 定点数
1.5.4…目录
一、数据库的基础操作
1、数据库的基本查看和切换
1.1 查看数据库信息
1.2 切换数据库
1.3 查看数据库中的表信息
1.4 查看数据库或数据库中表的结构字段
1.5 数据类型
1.5.1 整数型
1.5.2 浮点型(float和double)
1.5.3 定点数
1.5.4 字符串
1.5.5 日期和时间类型
1.6 数据类型的修饰符
1.6.1 适用所有类型的修饰符
1.6.2 适用数值型的修饰符
2、使用SQL语言管理数据库
2.1 SQL语言的概述
2.2 管理数据库DDL
2.2.1 创建库或表
2.2.2 删除库或表
2.3 管理表中的数据DML
2.3.1 表中插入数据
2.3.2 修改表中的数据
2.3.3 删除表中的数据
2.4 查询表中的数据DQL
2.4.1 未指定条件查询
2.4.2 指定条件查询
2.5 修改表名和表结构DCL
2.5.1 修改表名
2.5.2 修改表结构
二、数据库的高级操作
1、清空表命令的区别
1.1 drop table 表名
1.2 truncate table 表名
1.3 delete from 表名
2、创建临时表
3、克隆表
三、数据库用户管理
1、登录用户管理
1.1 新建并查看用户
1.2 修改用户的用户名和密码
1.2.1 修改用户的用户名
1.2.2 修改用户密码
1.3 删除用户
1.4 忘记root密码解决方法
2、登录用户权限管理
2.1 常见的用户权限
2.2 查看用户已有权限
2.3 授权操作
2.3.1 对不存在的用户进行创建并授权
2.3.2 对存在的用户进行授权
2.4 撤销用户权限 一、数据库的基础操作
1、数据库的基本查看和切换
1.1 查看数据库信息
show databases; #查看数据库信息 1.2 切换数据库
use 数据库名; #切换至具体的数据库 1.3 查看数据库中的表信息
show tables; #查看当前所处数据库的表信息
show tables in 数据库名; #查看指定数据库的表信息 1.4 查看数据库或数据库中表的结构字段
describe简写:desc 表名 #查看当前所处数据库的指定表的结构
describe简写:desc 数据库.表名 #查看指定数据库中表的结构 describe简写:desc 表名\G #查看当前所处数据库的指定表的结构
describe简写:desc 数据库.表\G #查看指定数据库中表的结构 1.5 数据类型
MySQL支持多种内置数据类型分别为数值类型、日期/时间类型、字符串(字符)类型
数据类型参考链接https://dev.mysql.com/doc/refman/8.0/en/data-types.html 1.5.1 整数型 tinyint(m) 1个字节 范围(-128~127) 有一个正或负的表示符 smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~8388607) int(m) 4个字节 范围(-2147483648~2147483647) bigint(m) 8个字节范围(-9.22*10的18次方)
上述数据类型如果加修饰符unsigned后则最大值翻倍
如tinyint unsigned的取值范围为(0~255)
1.5.2 浮点型(float和double)
float(m,d) 单精度浮点型 8位精度(4字节) m总个数d小数位, 注意: 小数点不占用总个数double(m,d) 双精度浮点型 m16位精度(8字节) m总个数d小数位, 注意: 小数点不占用总个数 如一个字段定义为float(6,3)如果插入一个数123.45678,实际数据库里存的是123.456但总个数还以实际为准即6位 1.5.3 定点数
在数据库中存放的是精确值存为十进制 decimal(5.2) 100.01 - 999.99
格式 decimal(m,d) 表示 最多 m 位数字其中 d 个小数小数点不算在长度内参数m65 是总个数d30且 dm 是小数位 如: decimal(6,2) 总共能存6位数字末尾2位是小数字段最大值 9999.99 小数点不算在长度内 1.5.4 字符串
类型大小用途char0-255 bytes定长字符串varchar0-65535 bytes变长字符串tinyblob0-255 bytes不超过 255 个字符的二进制字符串tinytext0-255 bytes短文本字符串blob0-65 535 bytes二进制形式的长文本数据text0-65 535 bytes长文本数据mediumblob0-16 777 215 bytes二进制形式的中等长度文本数据mediumtext0-16 777 215 bytes中等长度文本数据longblob0-4 294 967 295 bytes二进制形式的极大文本数据longtext0-4 294 967 295 bytes极大文本数据
char和varchar的比较:
参考https://dev.mysql.com/doc/refman/8.0/en/char.html
charvarchar存储固定长度的字符串存储可变长度的字符串存储时会根据定义的长度固定占用空间如果存储的字符串长度小于定义的长度会在后面补空格存储时根据实际数据长度动态分配空间只占用实际数据长度加上一定的长度描述开销适用于存储长度固定的数据比如固定长度的代码或者状态适用于存储长度可变的数据比如变长的描述文本或者用户名如果存储的数据大部分是相同长度的使用CHAR可能比较高效如果存储的数据长度变化较大使用VARCHAR可以节省空间 如 Valuechar(4)Storage RequiredvarcharStorage Required4 bytes1 byteabab4 bytesab3 bytesabcdabcd4 bytesabcd5 bytesabcdefghabcd4 bytesabcd5 bytes char(n) 若存入字符数小于n则以空格补于其后查询之时再将空格去掉所以char类型存储的字符串末尾不能有空格varchar不限于此char(n) 固定长度char(4)不管是存入几个字符都将占用4个字节varchar是存入的实际字符数1个字节所以varchar(4)存入3个字符将占用4个字节如果存入n多个字符数则char(n)和varchar(n)就会截取前n个char类型的字符串检索速度要比varchar类型的快 拓展varchar(50) 能存放几个 UTF8 编码的汉字
答mysql 5.0以上版本 varchar(50) 指的是50字符无论存放的是数字、字母还是 utf8 编码的汉字都可以存放50个
1.5.5 日期和时间类型
表示时间值的日期和时间类型为datetime、date、timestamp、time和year
每个时间类型有一个有效值范围和一个零值当指定不合法的MySQL不能表示的值时使用零值
类型大小 ( bytes)范围格式用途date31000-01-01/9999-12-31YYYY-MM-DD日期值time3-838:59:59/838:59:59HH:MM:SS时间值或持续时间year11901/2155YYYY年份值datetime81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值timestamp41970-01-01 00:00:00/2038结束时间是第 2147483647 秒北京时间 2038-1-19 11:14:07格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值时间戳
1.6 数据类型的修饰符
1.6.1 适用所有类型的修饰符
名称说明null数据列可包含NULL值默认值not null数据列不允许包含NULL值*为必填选项default默认值primary key主键所有记录中此字段的值不能重复且不能为NULLunique key唯一键所有记录中此字段的值不能重复但可以为NULLcharacter setname 指定一个字符集
1.6.2 适用数值型的修饰符
名称作用auto_increment自动递增适用于整数类型unsigned无符号
2、使用SQL语言管理数据库
2.1 SQL语言的概述
什么是SQL语言
Structured Query Language的缩写即结构化查询语言关系型数据库的标准语言用于维护管理数据库包括数据查询、数据更新、访问控制、对象管理等功能
SQL中的名词
数据库database表table行row 列column索引index视图view存储过程procedure存储函数function触发器trigger事件调度器event scheduler任务计划用户user权限privilege
数据库对象和命名
数据库的组件(对象)
数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等。
命名规则
①必须以字母开头后续可以包括字母数字和三个特殊字符# _ $ ②不要使用MySQL的保留字如 table、select、show、databases。 ③数据库名、表名、用户名区分大小
SQL语言规范
在数据库系统中SQL 语句不区分大小写建议用大写。SQL语句可单行或多行书写默认以 ; 结尾。关键词不能跨多行或简写。用空格和TAB 缩进来提高语句的可读性。子句通常位于独立行便于编辑提高可读性。
SQL语言的分类
DDL数据定义语言Data Definition Language用于创建数据库对象如库、表、索引等。
如createdropalter等。
DML数据操纵语言Data Manipulation Language用于对表中的数据进行管理。
如select、update、insert、delete 等。
DQL数据查询语言 Data Query Languag 用于从数据表中查找符合条件的数据记录。
如select
DCL数据控制语言Data Control Language用于设置或者更改数据库用户或角色权限
如grantrevoke
TCL事务控制语言Transaction Control Language用于管理数据库中的事务。 TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面。
如 commitrollbacksavepoint
2.2 管理数据库DDL
用于创建数据库对象如库、表、索引等
2.2.1 创建库或表
#创建新的数据库
create database 数据库名;#创建数据库中新的表
create table (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值NULL一个表只能有一个主键
create database xgy;
show databases;
use xgy; create table dianzi (id int not null,name char(10) not null,score decimal(4,2),passwd char(50) default,primary key (id));create table tongxin (id int not null,name char(10) not null,score decimal(4,2),passwd char(50) default,primary key (id));
#创建表名为tongxin的表且第一列为id、数据类型为整型不能为空第二列为name、数据类型为固定长度的字符类型为10字节不能为空第三列为score、数据类型为指定长度数组、第四列为passwd、数据类型为固定长度的字符类型为50字节默认可为空指定主键为id列show tablesdesc dianzi; 2.2.2 删除库或表
#删除指定的数据库
drop database 数据库名;#删除当前数据库中的指定表
drop table 表名;
#删除指定的数据库中的表
drop table 数据库名.表名; 2.3 管理表中的数据DML
对表中的数据进行管理,用来插入、删除和修改数据库中的数据
2.3.1 表中插入数据
insert into 表名(字段1,字段2[,...]) values (字段1的值字段2的值,...);
insert into 表名 values (字段1的值字段2的值,...);
#指定字段插入对应的字段值
insert into dianzi(id,name,score,passwd) values(1,cxy,88,123456);
#不指定字段按创建表时的字段对应插入字段的值
insert into dianzi values(2,zly,95,password(654321));
#其中password指加密显示密码
select * from dianzi; #查询表中所有数据 2.3.2 修改表中的数据
UPDATE 表名 SET 字段名1字段值1[,字段名2字段值2] [WHERE 条件表达式];
#改score值
update dianzi set score70 where namecxy;
select * from dianzi;
update dianzi set score90 where id1;
select * from dianzi; #改name值
update dianzi set namexz where id2;
update dianzi set namewuq where score90.00;
select * from dianzi; 2.3.3 删除表中的数据
delete from 表名 where 条件表达式; #删除具体的一条数据
delete from 表名; #删除表里所有的数据但字段和结构还存在
delete from dianzi where namexz;
select * from dianzi;
delete from dianzi;
select * from dianzi; 2.4 查询表中的数据DQL
SELECT 字段名1,字段名2[,...] FROM 表名[WHERE 条件表达式];
2.4.1 未指定条件查询
select * from 表名[\G] #查询当前所处库中表里的数据
select * from 库名.表名[\G] #查询指定数据库中表里的数据 2.4.2 指定条件查询
select 字段名1,字段名2,…… from 表名 where 条件表达式;
select * from dianzi;
select name,score from dianzi;
select name,score from dianzi where namecqq;
select score from dianzi where namecqq;#行显示
select * from dianzi limit 3;
select * from dianzi limit 3,2;
select id,name from dianzi limit 3; 2.5 修改表名和表结构DCL
2.5.1 修改表名
#修改表名
alter table 旧表名 rename 新表名; 2.5.2 修改表结构
1扩展表结构(增加字段)
alter table 表名 add 字段名 varchar(50) default 地址不详;
#default 地址不详表示此字段设置默认值为地址不详可与NOT NULL配合使用
alter table dianzi add address varchar(50) default 地址不详;
desc dianzi;
select * from dianzi; update dianzi set address江苏南京 where id1; 2修改字段(列)名添加唯一键
alter table 表名 change 旧列名 新列名 数据类型 [unique key];
#unique key:唯一键特性:唯一但可以为空空值只允许出现一次)
#Primary key:唯一且非空(主键一般选择能代表唯一性的字段不允许取空值NULL一个表只能有一个主键。)alter table dianzi change name mingzi varchar(15) unique key; insert into dianzi values(4,zly,55,password(444444),浙江杭州);
insert into dianzi values(4,cqq,55,password(444444),浙江杭州); 3删除字段
alter table 表名 drop 字段名; 4修改字段类型
alter table 表名 modify column 字段名 类型
#数据库中表字段是varchar(50)修改类型可以用modify谨慎修改类型可能会导致原有数据出错
alter table dianzi modify column mingzi char(20);
desc dianzi\G; 二、数据库的高级操作
1、清空表命令的区别
特性/命令drop table 表名truncate table 表名delete from 表名语言类属于DDL属于DDL属于DML回滚恢复不可回滚无法恢复不可回滚无法恢复可回滚可恢复是否带where不可带where不可带where 可带where 删除情况表内容和结构删除表内容删除结构保留表结构保留表内容视where执行情况删除速度删除速度快删除速度快删除速度慢需要逐行删
1.1 drop table 表名
drop table语句用于完全删除表包括表结构和所有数据。执行drop table将永久删除整个表需要小心使用因为数据无法恢复 1.2 truncate table 表名
truncate清空表后没有返回被删除的条目
truncate table语句用于从表中删除所有行但保留表的结构。它比delete语句更快因为它不是逐行删除而是直接删除整个表的数据ID会从1开始重新记录 insert into tongxin(name,score,passwd) value(mimi,54,password(123456)); 1.3 delete from 表名
delete清空表后返回的结果内有删除的记录条目
delete工作时是一行一行的删除记录数据的如果表中有自增长字段使用delete from删除 所有记录后再次新添加的记录会从原来最大的记录ID后面继续自增写入记录 insert into tongxin(name,score,passwd) value(mimi,54,password(123456)); 2、创建临时表
可以创建临时数据库Temporary Database来存储临时数据或执行临时操作。临时数据库是在当前连接会话中创建的数据库当会话结束时临时数据库会自动删除不会保留数据或数据库结构。这对于需要临时存储数据或执行临时操作而不想在数据库中永久保存这些数据时非常有用
create temporary table 表名 (字段1 数据类型,字段2 数据类型[, ...]
create temporary table class (id int(4) zerofill primary key auto_increment,name varchar(15) not null,cardid int(18) not null unique key,work varchar(60));#int(4) zerofill表示若数值不满4位数则前面用0填充例0001
#auto_increment表示此字段为自增长字段即每条记录自动递增1默认从1开始递增自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key表示此字段唯一键约束此字段数据不可以重复:一张表中只能有一个主键但是一张表中可以有多个唯一键
#not null表示此字段不允许为NULLinsert into class values(1,xyh,32011063,student);
insert into class values(2,lyq,13425576,player);
insert into class values(3,cht,13425576,cooker);
insert into class values(3,cht,14257396,cooker); insert into class(name,cardid,work) values(whr,87654321,teacher); 当退出数据库再重新进入临时数据库会自动删除不会保留数据或数据库结构 3、克隆表
克隆表是基于现有表结构和数据创建一个全新的表新表与原表具有相同的结构和数据但是它们是独立的 方法一建议迁移数据时使用
create table dianzi2 like dianzi; #复制dianzi表的格式字段
insert into dianzi2 select * from dianzi; #复制dianzi表中的数据内容 方法二建议备份数据时使用
create table dianzi3 (select * from dianzi); #一条命令实现复制字段和内容不包括结构 三、数据库用户管理
1、登录用户管理
1.1 新建并查看用户
create user 用户名来源地址 [identified by [password] 密码];#说明
#用户名指定将创建的用户名
#来源地址指定新创建的用户可在哪些主机上登录可使用IP地址、网段、主机名的形式本地用户可用localhost允许任意主机登录可用通配符%
#密码若使用明文密码直接输入密码插入到数据库时由Mysql自动加密
若使用加密密码需要先使用select password(密码)获取密文再在语句中添password 密文
若省略“identified by部分则用户的密码将为空(不建议使用)
明文密码创建登录用户
用户信息存放在 mysql 数据库下的 user 表MySQL 服务下存在一个系统自带的 mysql 数据库
create user dhlocalhost identified by 123456;
use mysql;
select * from user\G; #查看登录用户详细信息 加密密码创建登录用户
select password(123456); #先获取加密的密码
create user xzlocalhost identified by password *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9;select user,authentication_string,Host from user;
#查看用户信息创建后的用户保存在mysql数据库的user表里 1.2 修改用户的用户名和密码
1.2.1 修改用户的用户名
rename user xzlocalhost to xxylocalhost; 1.2.2 修改用户密码
修改当前用户密码 set password password(abc123); 修改指定用户密码
普通用户只有修改自身密码的权限root用户是超级管理员它不仅可以修改自身密码还能修改其他用户的密码
set password for cxylocalhostpassword(123456); 1.3 删除用户
drop user xxylocalhost; 1.4 忘记root密码解决方法
该操作必须是在数据库本机且为root用户才可进行
1修改 /etc/my.cnf 配置文件添加免密登录mysql并重启数据库服务
[rootlocalhost ~]#vim /etc/my.cnf
[mysqld]
skip-grant-tables
#添加使登录mysql不使用授权表
[rootlocalhost ~]#systemctl restart mysqld.service 2无密码登录之后修改数据库用户中的 root 密码
update mysql.user set authentication_string password(123) where userroot;
#用于更新MySQL数据库系统表mysql.user中的用户root的密码。AUTHENTICATION_STRING是MySQL 5.7.0以后版本中用于存储密码的字段名 3登录测试新密码 4撤销添加的免密码认证设置重启数据库服务
[rootlocalhost ~]#vim /etc/my.cnf
[mysqld]
#skip-grant-tables
#撤销添加的免密码认证设置
[rootlocalhost ~]#systemctl restart mysqld.service 2、登录用户权限管理
2.1 常见的用户权限
权限权限说明权限级别create 创建数据库、表或索引的权限数据库、表或索引drop删除数据库或表的权限数据库或表grant option赋予权限选项数据库或表references引用权限数据库或表alter更改表的权限数据表delete删除表数据的权限数据表index操作索引的权限数据表insert添加表数据的权限数据表select查询表数据的权限数据表update更新表数据的权限数据表create view创建视图的权限视图show view查看视图的权限 视图alter routine 更改存储过程的权限存储过程create routine 创建存储过程的权限存储过程execute 执行存储过程权限存储过程file 服务器主机文件的访问权限文件管理create temporary tables 创建临时表的权限服务器管理lock tables 锁表的权限 服务器管理create user 创建用户的权限服务器管理reload 执行 flush privileges, refresh, reload 等刷新命令的权限 服务器管理process 查看进程的权限服务器管理replication client 查看主从服务器状态的权限服务器管理relication slave 主从复制的权限服务器管理show databases 查看数据库的权限服务器管理shutdown 关闭数据库的权限服务器管理super 超级权限 服务器管理all [privilege] 所有权限 usage没有任何权限
2.2 查看用户已有权限
查看当前用户自己的权限
show grants; #查看当前用户自己的权限 查看其他用户的权限
show grants for 用户名localhost; #查看其他用户的权限 2.3 授权操作
2.3.1 对不存在的用户进行创建并授权
[NO_AUTO_CREATE_USER] 即在grant语句中禁止创建空密码的账户使用grant语法创建用户必须带上 “identified by”关键字设置账户密码否则就被认为是非法的创建语句
grant 权限列表 on 数据库名.表名 to 用户名来源地址 identified by 密码;
如grant all on *.* to xzlocalhost identified by 123;
#给用户xz授予本地登录的所有操作权限#说明
#权限列表用于列出授权使用的各种数据库操作以逗号进行分隔如select, insert,update。 使用all表示所有权限实际上部分权限仍无法使用只包括大部分权限可授权执行任何操作。
#数据库名.表名用于指定授权操作的数据库和表的名称其中可以使用通配符*。 例如使用mysql.* 表示授权操作的对象为mysql数据库中的所有表。
#用户名来源地址用于指定用户名称和允许访问的客户机地址即谁能连接、能从哪里连接。 来源地址可以是域名、IP地址还可以使用“%”通配符表示某个区域或网段内的所有地址。
#identified by用于设置用户连接数据库时所使用的密码字符串。在新建用户时若省略identified by部分则用户的密码将为空。
grant select on xgy.dianzi to cxy172.16.12.% identified by 123456;use mysql;
select user,authentication_string,Host from user;
show grants for cxy172.16.12.%; mysql服务器本地连接查看 使用Navicat图形化工具远程连接 2.3.2 对存在的用户进行授权
grant all on xgy.dianzi to dhlocalhost;
show grants for dhlocalhost; 登录到被授权的用户进行测试 update dianzi set score99 where id1;
delete from dianzi where id5;
select * from dianzi; 2.4 撤销用户权限 revoke 权限列表/all on 库名.表名 from 用户名来源地址; revoke all on xgy.dianzi from dhlocalhost; 登录到用户dh进行测试