Linux高级编程——数据库(表操作)

在数据库中创建表,并进行 CRUD 操作。

在库中进行表操作,先use 库名进入库提示Database changed

创建一个表:

mysql> CREATE TABLE student(
	-> sno INT UNSIGNED,
	-> name VARCHAR(20),
	-> sex CHAR,
	-> sight FLOAT(2,1),
	-> birth DATE,
	-> phone CHAR(11)
-> );

查看表:

mysql> show tables;

查看某一个表(student)内容:

mysql> desc student;

删除表:

mysql> DROP TABLE student;

修改表的结构信息使用 ALTER TABLE 语句,具体参数要查阅文档。

INSERT语句:
1. INSERT INTO student VALUES(1001,'张三','男',4.8,'1999-8-16','17671874644');

2. INSERT INTO student (name, sno, birth) VALUES('张四',1002,'1999-8-10);
3.  /*指定插入*/
SELECT语句:
1. SELECT * FROM student; 
2. /*查student表中所有字段*/

3. SELECT name,phone,sno FROM student; 
4. /*查student表中name、phone、sno字段*/

SELECT 语句执行后会得到一个查询结果集,可能为空集。

WHERE子句:必须和其他语句配合使用(通常和 SELECT 语句配合使用),用于设置操作条件,即只有满足其后面的条件才执行相关操作。

使用 LIKE 关键字,通配符_表示1个任意字符,通配符% 表示 0 或 多个任意字符。

1. SELECT name,phone,sno FROM student WHERE name LIKE '张%';
/*查student表中姓张的所有人的姓名、手机号、学号*/

2. SELECT name,phone,sno FROM student WHERE name LIKE '张__';
/*查student表中姓张(三个字)的所有人的姓名、手机号、学号*/

3. SELECT name,phone,sno FROM student WHERE name LIKE '__';
/*查student表中名字两个字的所有人的姓名、手机号、学号*/

BETWEEN AND:如果字段介于某个范围;

SELECT * FROM student WHERE sno BETWEEN 1002 AND 1004;
/*查询student表中所有学号在1002到1004这个闭区间内的对象信息*/
DELETE语句

单独使用:删除某个表DELETE FROM 表名

配合使用:

DELETE FROM student WHERE sex IS NULL ; 
/*清空表中sex为NULL的对象;*/
UPDATE语句
UPDATE student SET name = '张三丰',sex='女' WHERE name='张三';
/*将student表中所有名字叫张三的名字修改成张三丰、性别修改成女*/

约束机制(Constraint)

对数据库的数据进行合法性检查,将非法数据据之门外。

约束分为以下五种:

非空约束(NOT NULL)

字段的值不能为 NULL,但可以设默认值;

CREATE TABLE 表名 (a INT,b INT NOT NULL,c INT NOT NULL DEFAUAT 100;
/*创建一个表,规定输入时 b 字段不能为空,c 字段不输入(NULL)会等于默认值100*/
唯一约束(UNIQUE)

字段的值不能重复,但可以为NULL;

CREATE TABLE 表名 (a INT UNIQUE);
/*创建一个表,规定输入时,a字段不能与表内同a字段重复*/
主键约束(PRIMARY KEY)

非空并且唯一,用来唯一地标识一条记录,可以为一个字段,也可以为多个字段。

CREATE TABLE 表名 (a INT PRIMARY KEY);
/*创建一个表,规定输入时,a字段不能为NULL且a字段不能与表内同a字段重复*/
CREATE TABLE 表名 (a INT,b INT,PRIMARY KEY(a,b))
/*创建一个表,规定输入时,a、b字段不能为NULL且a、b字段不能与同时表内同a、b字段都重复,可以重复某一个*/
外键约束(FOREIGN KEY)

字段只能属于其他表中的某个字段内的内容;能作为引用的表中 的内容必须是唯一键/主键;

CREATE TABLE A (a INT UNIQUE); //创一个表为A,有INT型唯一健;
CREATE TABLE B (b INT, FOREIGN KEY (b) PREFERENCES A(a)); //创建一个表B,a字段只能属于A表内的a字段某值或NULL;

当清空A时,B内没有清空,则删除失败,必须把B内引用的删除/清空才能清空A

​ 级联(CASCADE):多个表引用同一个表时,被引用表改变或删除,其他表内对应的数值也会改变或删除

CREATE TABLE B (b INT, FOREIGN KEY (b) PREFERENCES A(a) ON DELETE CASCADE);
/*设置外键约束的同时,若上级删除(清空),对应的也会被删除*/

同理:修改UPDATE 替换 DELETE

检查约束(CHECK)

限制字段的取值范围;

CREATE TABLE A (a INT CHECK (a < 5 and a > 2)); //限定a字段只能小于2大于5,可为NULL

ALTER TABLE (约束条件通常是在创建表时进行设置,当然也可以)

更改已存在表的结构约束:

ALTER TABLE student MODIFY sno INT UNSIGNED PRIMARY KEY;
/*将student表中sno字段设成主键约束*/
ALTER TABLE student MODIFY name VARCHAR(20) NOT NULL;
/*将student表中sno字段设成非空约束*/
ALTER TABLE student MODIFY sex CHAR(1) CHECK (sex='男' OR sex='女');
/*将student表中sno字段设成检查约束sex=男/女*/
ALTER TABLE student MODIFY phone CHAR(11) UNIQUE;
/*将student表中sno字段设成唯一约束*/

排序(ORDER BY)

select * from student order by sight; //asc是升序(默认)
/*将所有人的信息按sight升序排列*/
select * from student order by sight DESC; 
/*将所有人的信息按sight降序排列*/
select * from student order by sight DESC,birth asc, sex DESC; 
/*将所有人的信息按一级sight降序、二级birth升序、三级sex降序排列*/

TOP N 问题:联合使用 ORDER BY 子句和 LIMIT 子句实现。

select * from student order by sight DESC,birth asc, sex DESC LIMIT 3; 
/*将所有人的信息按一级sight降序、二级birth升序、三级sex降序排列,并只显示前三个*/

DISTINCT 关键字:过滤重复的字段值。

select DISTINCT sex from student;
/*不重复显示student中sex类*/

MySQL 内置函数

  • 单行函数:对单条记录进行处理,比如:LEFT、LENGTH等。

  • 聚合(多行)函数:对多条记录进行处理,比如 COUNT、MAX、MIN、AVG、SUM 等。

left(字段,N) //筛选出字段前N个字段、IN(集合)

select name sex, phone from student WHERE left(phone,4) IN ('130','131','132','176');
/*筛选(left)出表student中phone字段前3个位属于(IN)中的name和sex;*/

聚合函数count()

select count(*) from student
/*统计student表中所有对象的总数*/
select count(*) from student where sex='女';
/*统计student表中所有对象的sex字段为'女'的总数*/

分组查询:GROUP BY 子句,通常和聚合函数、HAVING 子句配合使用;

select sex, AVG(sight) FROM student GROUP BY sex;
/*显示sex各类对应所有的sight的平均值以sex类分组显示*/
select sex AS '性别', AVG(sight)  AS '平均视力' FROM student GROUP BY sex;
/*接上,将表格上栏改成性别与平均视力*/
select sex AS '性别', AVG(sight)  AS '平均视力' FROM student GROUP BY sex HAVING sex='男';
/*接上,HAVING对分组完后的数据筛选出sex='男'的对象*/

你可能感兴趣的:(Linux高级编程,sql,mysql,数据库,linux)