数据库和数据库表操作
作者:刘佳乐
- 2020.6.18
一、基本语法
1).创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名;
2).删除数据库
DORP DATABASE [IF EXISTS] 数据库名;
3).查看数据库
SHOW DATABASES;
4).使用数据库
USE 数据库名;
二、Oracle上使用数据库
登录的适合使用数据库
1 mysql -uroot -D 数据库名 -p
2 enter password:ok
1.创建数据库
mysql> create database if not exists ljldata;
Query OK, 1 row affected (0.00 sec)
2.查询数据库
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ljldata |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.01 sec)
3.删除数据库
mysql> drop database if exists ljldata;
Query OK, 0 rows affected (0.00 sec)
4.查询数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
5.使用数据库(也就是数据的切换)
mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
3.结构化语言分类
4.创建数据库表语法
5.数据库列类型
1.数值类型
2.字符串类型
3.时间类型
4.null类型
6.列的属性字段
1.创建数据库并使用数据
mysql> create database ljldata;
Query OK, 1 row affected (0.00 sec)
mysql> use ljldata;
Database changed
2.创建数据库表students
mysql> create table students
-> (id int unsigned not null auto_increment primary key,
-> name char(8) not null,
-> sex char(4) not null,
-> age tinyint unsigned not null,
-> tel char(13) null default '_'
-> );
Query OK, 0 rows affected (0.00 sec)
3.查看表结构
mysql> desc students;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | char(8) | NO | | NULL | |
| sex | char(4) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| tel | char(13) | YES | | _ | |
+-------+---------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
7.修改数据库
1.修改表名
mysql> alter table students rename as stu;
Query OK, 0 rows affected (0.01 sec)
2.查看该数据下所有的数据库表
mysql> show tables;
+-------------------+
| Tables_in_ljldata |
+-------------------+
| stu |
+-------------------+
1 row in set (0.00 sec)
3.添加字段
添加password密码字段
mysql> alter table stu add password char(8);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
查看表结构
mysql> desc stu;
+----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | char(8) | NO | | NULL | |
| sex | char(4) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| tel | char(13) | YES | | _ | |
| password | char(8) | YES | | NULL | |
+----------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
4.修改字段
mysql> alter table stu modify password char(4);
\Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table stu change password pwd char(5);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc stu;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | char(8) | NO | | NULL | |
| sex | char(4) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| tel | char(13) | YES | | _ | |
| pwd | char(5) | YES | | NULL | |
+-------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
5.删除字段
mysql> alter table stu drop pwd;
Query OK, 0 rows affected (0.24 sec)
Records: 0 Duplicates: 0 Warnings: 0
8.删除数据库表
1.删除数据库表
mysql> drop table if exists stu;
Query OK, 0 rows affected (0.00 sec)
mysql> -- 查看该库下用户下的所有数据库表
mysql> show tables;
Empty set (0.00 sec)
三、增删改查语法
having子句:有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出。
group by子句通常和count()、sum()等聚合函数一起使用。
order by子句:按照“属性名”指定的字段进行排序。排序方式由“asc”和“desc”两个参数指出,默认是按照“asc”来排序,即升序。
模糊查询:where like %%;
查询空值:where is null;
数据去重:distinct
与:and
或:or
分组:group by
SELECT s_id ,COUNT(1) AS total FROM fruits GROUP BY s_id
MYSQL中可以在GROUP BY中使用GROUP_CONCAT()函数,将每个分组中各个字段的值显示出来
SELECT s_id,GROUP_CONCAT(f_name) AS NAMES FROM fruits GROUP BY s_id
查询总条数:select count(*) from 表名;
select 字段名1,字段名2或[*] from 表名;
-- 插入数据(有id序列)
insert into 表名(字段名1,字段名2,..) values(值1,值2,...);
-- 修改数据
update 表名 set 列名=新值 where 字段名=字段值;
-- 删除数据
delete from 表名 where 字段名=字段值;
三、MySQL上增删改查操作
CREATE TABLE students(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
pwd VARBINARY(20) NOT NULL,
age INT UNSIGNED DEFAULT 0,
sex CHAR(4) DEFAULT '男'
);
-- 插入查询语句
-- INSERT INTO 表名(列名1,列名2,列名3,....) VALUES (值1,值2,值3,...);
INSERT INTO students(NAME,pwd,age) VALUES ('ljl','456',20);
INSERT INTO students(NAME,pwd,age) VALUES('啊乐','123',22);
-- 修改
-- update 表名 set 列名='新值' where 列名=值{and 列名=值...}
UPDATE students SET pwd ='12345556' WHERE id=1;
-- 创建teacher表
CREATE TABLE teacher(
id INT UNSIGNED NOT NULL PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
pwd VARCHAR(20) NOT NULL,
classid INT(10) NOT NULL
);
-- 插入数据
INSERT INTO teacher(id,NAME,pwd,classid) VALUES(1,'阿乐','123',1);
INSERT INTO teacher(id,NAME,pwd,classid) VALUES(2,'啊乐','456',1);
INSERT INTO teacher(id,NAME,pwd,classid) VALUES(3,'阿豪','789',2);
INSERT INTO teacher(id,NAME,pwd,classid) VALUES(4,'啊豪','987',2);
-- 条件查询
-- select * from 表名 where 列名=值;
SELECT * FROM teacher WHERE id=1;
-- 查询所有
-- select * from 表名
SELECT * FROM teacher;
-- 进一步练习
SELECT * FROM teacher WHERE classid=1;
SELECT * FROM teacher;
UPDATE teacher SET pwd='147' WHERE id =3;
SELECT * FROM teacher;
DELETE FROM teacher WHERE id=4;
SELECT * FROM teacher;
INSERT INTO teacher(id,NAME,pwd,classid) VALUES(4,'啊豪','258',2);
INSERT INTO teacher(id,NAME,pwd,classid) VALUES(5,'啊豪豪','369',2);
-- 使用聚合函数统计条数
SELECT COUNT(*) FROM teacher;
SELECT COUNT(1) FROM teacher;
-- 1.根据编号分组查询
SELECT classid FROM teacher GROUP BY classid;
-- 2.先根据classid分组,分组后查询classid=2 (分组后的条件写在having后)
SELECT classid FROM teacher GROUP BY classid HAVING classid=2;
-- 3.按照ID降序查询
SELECT id,NAME FROM teacher ORDER BY id DESC;
-- 4.按照id升序查询(默认升序)
SELECT id,NAME FROM teacher ORDER BY id ASC;
-- 5.条件降序
SELECT NAME,id FROM teacher WHERE id<4 ORDER BY id DESC;
-- 6.模糊查询,查以"阿"开头(右模糊)
SELECT * FROM teacher WHERE NAME LIKE '阿%';
-- 7.模糊查询,查以'乐'结尾(左模糊)
SELECT * FROM teacher WHERE NAME LIKE '%乐';
-- 8.模糊查询,查询包含"豪"关键字的(左右迷糊==全模糊)
SELECT * FROM teacher WHERE NAME LIKE '%豪%';
-- 9.去重查询
SELECT DISTINCT id,NAME FROM teacher;
-- 10.创建班级表
CREATE TABLE classes(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAME VARBINARY(20) NOT NULL
);
-- 11.给班级表插入数据
INSERT INTO classes(NAME) VALUES('ljl');
-- 12.查询classes数据
SELECT * FROM classes;
-- 13.teacher和classes联查
SELECT c.id,c.name,t.id,t.name,t.pwd,t.classid
FROM teacher t,classes c
WHERE t.`classid`=c.`id`;
SELECT c.id,c.name,t.id,t.name,t.pwd,t.classid
FROM classes c,teacher t
WHERE t.`classid`=c.`id`;
SELECT *
FROM teacher t,classes c
WHERE t.`classid`=c.`id`;
-- 给列添加别名
SELECT c.id cid,c.name cname,t.id tid,t.name tname,t.pwd
FROM classes c,teacher t
WHERE t.`classid`=c.`id`;
-- 函数:最大值
SELECT MAX(id) FROM teacher;
SELECT MAX(id) AS 'id最大值' FROM teacher;
SELECT MAX(id) 'id最大值' FROM teacher;
-- 最小值
SELECT MIN(id) FROM teacher;
SELECT MIN(id) AS 'id最小值' FROM teacher;
SELECT MIN(id) 'id最小值' FROM teacher;
-- 平均值
SELECT AVG(id) FROM teacher;
SELECT AVG(id) AS 'id平均值' FROM teacher;
SELECT AVG(id) 'id平均值' FROM teacher;
-- 去重空格
SELECT TRIM('阿乐');
-- 获取系统时间
SELECT NOW();
-- 将日期和时间分开查询
SELECT UTC_DATE(),UTC_TIME();