MySQL数据库和表管理
- 一、常用的数据类型
- 1、int(N)
- 2、float(m,d)
- 3、char与varchar
 
- 二、查看数据库结构
- 1、查看当前服务中的数据库
- 2、查看数据库中存在的表
- 3、查看表结构
 
- 三、SQL语句
- 1、SQL语言规范
- 2、SQL语言分类
 
- 四、创建、删除数据库和表
- 1、创建数据库
- 2、创建表
- 3、删除数据表
- 4、删除数据库
 
- 五、管理数据表中的记录(增删改查)
- 1、向表中插入新的信息(增)
- 2、查询表中记录(查)
- 3、修改更新数据表中记录(改)
- 4、在数据表中删除指定的记录(删)
 
- 六、修改表名和表结构
- 1、修改表名(rename)
- 2、扩展增加字段(add)
 
- 七、常见的约束
- 总结
 
一、常用的数据类型
1、int(N)
int(N)中的N不是限制字段取值范围的,int的取值范围是固定的(0至4294967295)或(-2147483648至2147483647)。N这个值是为了zerofill在字段中的值不够时补零的。
int默认是signed(有符号),取值范围(-2147483648至2147483647)。如果加了unsigned( 无符号)参数那么取值范围就为(0至4294967295)。
2、float(m,d)
设一个字段定义为float(6,3),表示6个有效长度数字,小数点后面有3位。如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。如果插入数12.123456,存储的是12.123,如果插入12.12,存储的是12.120。
整数部分最大是3位,如果插入1234.56,会插入失败。
3、char与varchar
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
二、查看数据库结构
mysql默认不区分大小写,表名和库名区分大小写。
在Linux系统中,命令结束后一定要加分号,结尾符。
1、查看当前服务中的数据库
show databases;    #查看数据库

2、查看数据库中存在的表
方法一:
use  数据库名;     #切换库
show  tables;     #查看库中的表
 
方法二:
 show tables from 数据库名;    #直接查看某个库中的表
 例:show tables from mysql;

 
3、查看表结构
 方法一:
 use 数据库名;     #切换库
 desc 表名;     #查看指定表的结构
 
 方法二:
 desc [数据库名.]表名;
 可缩写成:desc 数据库名.表名;
 例:desc mysql.user;

 
三、SQL语句
关系型数据,都是使用SQL语句来管理数据库中的数据。
SQL及结构化查询语言。
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
1、SQL语言规范
SQL语句可单行或多行书写,默认是以英文 " ; "结尾,关键字不能跨多行或简写。子句通常位于独立行,便于编辑,提高可读性。
命名规则:
必须以字母开头,后续可以包括字母,数字和三个特殊字符(# _ $)
不要使用MySQL的保留字,如table、select、show、databases。
数据库名、表名、用户名区分大小写
2、SQL语言分类
(1)DDL:数据定义语言(Data Definition Language),用于创建数据库对象,如库、表、索引等。
如:CREATE,DROP,ALTER 等。
(2)DML:数据操纵语言(Data Manipulation Language),用于对表中的数据进行管理。
如: SELECT、UPDATE、INSERT、DELETE 等。
(3)DQL:数据查询语言( Data Query Languag ),用于从数据表中查找符合条件的数据记录。
如: SELECT
(4)DCL:数据控制语言(Data Control Language),用于设置或者更改数据库用户或角色权限。
如: GRANT,REVOKE
(5)TCL:事务控制语言(Transaction Control Language),用于管理数据库中的事务。 TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面。
四、创建、删除数据库和表
1、创建数据库
create database 库名;    #创建数据库

2、创建表
 CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]);
 
 #主键一般选择能代表唯一性的字段,不允许取空值(NULL),值也不允许重复,主键字段的值是唯一的。一个表只能有一个主键。
 
  USE school;                  #切换school库
 CREATE TABLE class (id int NOT NULL,name char(10) NOT NULL,score decimal (6,2),passwd char(48) DEFAULT '',PRIMARY KEY (id));        #新建表class
 
 #第一个字段名id,数据类型是int整数型,NOT NULL不许为空值。
 #第二个字段名name,数据类型是char固定长度的字符,长度是10个字节。
 #第三个字段名score,数据类型是decimal (6,2),表示5个有效数字、其中小数点后2位。
 #第四个字段名passwd,DEFAULT '' 表示默认值是无值(不是空值null)。
 #PRIMARY KEY (id),表示id字段是主键。
 
 DESC class;    #查看class表的结构

3、删除数据表
drop table [数据库名.]表名;
 
例:drop table class01;

4、删除数据库
drop database 数据库名;
 
例:drop database  school;

五、管理数据表中的记录(增删改查)
1、向表中插入新的信息(增)
 方法一:为所有字段插入值
 insert into 表名 values (所有字段的值);    #每个字段值用逗号相隔;
 
方法二:为指定字段插入值
 INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值,字段2的值,...);    #注意字段的属性not null,则必须为该字段插入值
 #下面这条命令不生效,因为name字段设置了not null,不允许为空值。
 INSERT INTO student (id, score, age,gender) values (3, 88, 123123);
 
 SELECT * FROM student;    #查询表的数据记录
1.先创建个数据表student
 create table student(id int NOT NULL,name char(5) NOT NULL,age char(6),sex char(8));
2.向表中添加数据
insert into student values('01','李华','16','M');
Query OK, 1 row affected (0.00 sec)
insert into student values('03','小红','18','F');
Query OK, 1 row affected (0.00 sec)
insert into student values('02','小明','12','M');
Query OK, 1 row affected (0.00 sec)
insert into student values('04','张三','15','M');
Query OK, 1 row affected (0.00 sec)
insert into student values('05','李四','11','F');
Query OK, 1 row affected (0.00 sec)

2、查询表中记录(查)
 SELECT * FROM 表名;      #查询表中所有记录
 
 #按条件查找数据记录,且只显示指定字段的值
 SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
 
 #表中的记录默认是横向展示的,当字段很多时显示很乱,可以将";"换成"\G",改成纵向展示每条记录。
 select * from 表名\G
 
 #mysql的分页语句:
 select * from 表名 limit 2; 
 select * from 表名 limit 2,3;       #显示第2行后的前3行(即显示第3~5行)
 select * from 表名 limit 19,11;     #查看第20行到第30行的记录
 select * from 表名 id>=10 and id<=20;    #查看id值在10到20之间的数据记录

 
 
 
 
 
3、修改更新数据表中记录(改)
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
  
例: student set age=20 where id=1;
Query OK, 1 row affected (0.00 sec)
  #修改id=1的数据记录,将age字段值改为20。 建议使用唯一性比较好的字段作为指定条件,因为名称可能有重复,但id不会重复。
修改时加上条件,否则会把表中的所有行都修改
 
4、在数据表中删除指定的记录(删)
DELETE FROM 表名 [WHERE 条件表达式];     #删除一定要加条件,不然会删除整个表
例: from student where id=2;     #删除id字段值为2的数据记录
删除数据记录时,一定要加条件,否则会将整个表都删除!
 
六、修改表名和表结构
1、修改表名(rename)
ALTER TABLE 旧表名 RENAME 新表名
 
例:ALTER TABLE student RENAME zzt;   #将student的表名修改为zzt
   ALTER TABLE zzt RENAME student;   #将zzt的表名修改回student

2、扩展增加字段(add)
  ALTER TABLE 表名 ADD 字段名 数据类型;
 
 例:
 alter table student add address varchar(30) not null default '云计算学院';
 #增加“address"字段,不允许为空值,默认值为“云计算学院”。
 #default '云计算学院':表示此字段设置默认值为"云计算学院",可与NOT NULL配合使用。

七、常见的约束
主键约束(primary key) PK
自增长约束(auto_increment)
非空约束(not null)
唯一性约束(unique)
默认值约束(default)
零填充约束(zerofill)
外键约束(foreign key)FK
总结
查看数据库和表
show databases;
use 库名;
show tables;
desc 表名;
desc 表名\G
show create table 表名
创建删除数据库和表
insert into 表名 values (所有字段的值)。
insert into 表名 (指定字段名称) values(字段的值)。
delete from 表名 [where …]。
truncate table 表名; #删除表中所有数据。相当于格式化,速度很快。
update 表名 set 字段=值[, 字段2=…] [where …]。
select 字段1[,字段2…] from 表名 [where …]。
select * from 表名。
 修改表名和表结构
alter table 表名 RENAME/ADD/CHANGE/DROP 字段名 数据类型 属性。
库和表
insert into 表名 values (所有字段的值)。
insert into 表名 (指定字段名称) values(字段的值)。
delete from 表名 [where …]。
truncate table 表名; #删除表中所有数据。相当于格式化,速度很快。
update 表名 set 字段=值[, 字段2=…] [where …]。
select 字段1[,字段2…] from 表名 [where …]。
select * from 表名。
 修改表名和表结构
alter table 表名 RENAME/ADD/CHANGE/DROP 字段名 数据类型 属性。
alter table 表名 ADD 键名(字段); //给指定字段添加键约束。


















![Mysql问题:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause](https://img-blog.csdnimg.cn/1066a58e1b5d4b119df843e604651406.png)
