数据库终端与服务器的链接建立、服务器的开启与关闭、基本增删改查数据操作
sql(structured query language 结构化的查询语言);
数据库中的语句和表属性不区分大小写,只有表的名字区分大小写;
数据库的执行语句以分号','为结尾表示语句的结束;
注:sql中表示字符串的时候,既可以使用单引号也可以双引号;
数据库的分类:
数据库的分类分为关系型数据库和给关系型数据库;
命令集合:
$ whereis mysql #查找数据库的路径
sudo /etc/init.d/mysql stop #关闭mysql服务器 (计算机默认开启)
sudo /etc/init.d/mysql start #启动mysql服务器
mysql -u root -p #打开终端客户端,建立终端与mysql的链接
password:123456
\c #清空写下的语句
\q #退出终端客户端
CREATE DATABASE testDB; #建立数据库
SHOW DATABASES; #显示数据库
use testDB; #使用数据库
select * from customers;
show tables;
show create table customers;
1.关系型数据库建模(构件块):
数据以行和列的形式存储数据;
这一系列的行和列成为表(关系);
表中每一行表示一条记录(元组),即行-元组;
表中每一列表示记录的一个属性,即-列-属性;
一组表组成了数据库;
表与表之间的逻辑关联叫关系。
2.关系型数据库的核心内容是关系,即二维表:
常用的关系操作:查询;插入、删除、修改操作;
关系操作的对象是关系,操作结果也是关系;
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。
3.集合操作:
选择:
从表中抽取出满足给定限制条件的行
选择的结果是行;
投影的结果是列;
并:
属于表1或者属于表2的元组构成的集合,前提是表的属性的顺序和个数都相同
差:
两个表中不一样的部分,前提是两个表中具有相同字段(属性名可以不同)
笛卡尔积:
将两个表中的元组以所有可能的方式组合起来;
元组数量是各个表的元组数(行数据)的乘积
4.mysql服务器和客户端
在Ubuntu安装MySQL,要安装
服务器 - 管理数据库(相当于QQ后台);
客户端 - 一系列访问数据和创建应用的工具(相当于QQ软件)。
实例:
终端打开数据库:
mysql -u root -p123456 #ser为root,password为123456,-p后面没有空格
mysql> show databases; #后面有分好表示结束
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
图形界面数据库:MySQL Workbench #点击闪电开始运行程序
5.启动MySQL服务器(默认是开启的,创建客户端与服务器的链接,所有都是先开启服务器后开启客户端):
终端建立与服务器的链接:
mysql -u 用户名 -p密码 -h 服务器名称 -P 端口
例:mysql -u root -p123456
或者
mysql -u root -p
password:123456
6.退出sql客户端程序(断开与mysql服务器的链接,退出客户端即断开):
quit;
\q
exit
7.清楚之前输入的sql语句,重新开始输入
\c
8.关闭MySQL服务器:
sudo /etc/init.d/mysql stop #关闭mysql服务器 (需要键入超级用户的密码)
sudo /etc/init.d/mysql start #启动mysql服务器
mysql -u root -p #打开客户端,建立终端与mysql的链接
password:123456
实例:
yiquanchaoren@qiyu:~$ sudo /etc/init.d/mysql stop
[sudo] tarena 的密码:
[ ok ] Stopping mysql (via systemctl): mysql.service.
yiquanchaoren@qiyu:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.
yiquanchaoren@qiyu:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.19-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
9.查找mysql服务器的位置
yiquanchaoren@qiyu:~$ whereis mysql
实例:
mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/include/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
10.sql(structured query language 结构化的查询语言)写作规范
不区分字母的大小写(注:MySQL对表的名字区分大小写);
以关键字开头:SELECT,INSERT,UPDATE,DELETE,ALTER,DROP,CREATE,USE,SHOW;
以分号;结尾
11.创建数据库
CREATE DATABASE 数据库名;
CREATE DATABASE testDB;
12.查询已有的数据库:
SHOW DATABASES;
实例:
mysql> CREATE DATABASE testDB;
Query OK, 1 row affected (0.00 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testDB |
+--------------------+
5 rows in set (0.03 sec)
bug:没有加分号,
13.选择数据库:
use 数据库名
use testDB;
实例:
mysql> use testDB
Database changed
14.创建表格
create table 表名(column1 datatype,...,columnN datatype);
15.数据类型:
字符串:
定长 char
不定长 varchar
数值型:
整型 int
定长小数 decimal 例:decimal(5,2) 123.45
浮点型float
日期和时间
实例:
create table customers(ID INT,NAME VARCHAR(20),AGE INT,ADDRESS CHAR(25),SALARY DECIMAL(18,2));
实例:
mysql> use testDB
Database changed
mysql> create table customers(ID INT,NAME VARCHAR(20),AGE INT,ADDRESS CHAR(25),SALARY DECIMAL(18,2));
Query OK, 0 rows affected (0.04 sec)
16.查询已有的表:
show tables
实例:
mysql> show tables;
+------------------+
| Tables_in_testDB |
+------------------+
| customers |
+------------------+
1 row in set (0.00 sec)
17.选择数据库:
mysql> select * from customers;
Empty set (0.00 sec)
18.查询已有的表
show tables;
19.查询已有的表的各个字段(查询使用表的所有属性名称和数据类型吗)
show create table customers;
实例:
mysql> show create table customers;
+-----------+
| Table | Create Table
+-----------+
| customers | CREATE TABLE `customers` (
`ID` int(11) DEFAULT NULL,
`NAME` varchar(20) DEFAULT NULL,
`AGE` int(11) DEFAULT NULL,
`ADDRESS` char(25) DEFAULT NULL,
`SALARY` decimal(18,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
练习:
创建数据库:schools
使用该数据库;
创建表students,其中字段包括:
id int,name varchar(20),gender char(20),age int
查询当前数据库中的所有的表格
查询表studets中的所有属性名称和数据类型
sudo mysql -u root -p123456
create database schools;
use schools;
create table student(id int,name varchar(20),gender char(20),age int)
show tables;
show create table student;
20.删除表格
drop table 表名;
21.删除数据库:
drop database 数据库名;
实例:
create database yangDB;
show databases;
use yangDB;
create table python(id int);
show tables;
drop table python;
show tables;
drop database yangDB;
show databases;
22.往表中插入数据
两种语法:
(1)insert into 表名 (column1,column2,...,columnN) values (value1,value2,...,valueN);
(2)insert into 表名 values (value1,value2,value3,...,valueN);
实例:
insert into customers(id,name,age,address,salary) values (1,'Ann',30,'beijing',2000);
insert into customers(id,name,age,salary,address) values (2,'li',30,2000,'beijing'); #更换了属性顺序
insert into customers values (3,'jeremy',20,'shanghai',2000)
23.一次性插入N条数据:
insert into customers(ID,NAME,AGE,ADDRESS,SALARY) VALUES (4,'Bob',25,'beijing',6500),(5,'aaa',25,'beijing',6500),
(6,'bbb',25,'beijing',6500),(7,'ccc',27,'beijing',6500);
24.select查询语句:
select column1,column2,...,columnN from 表名;
(1)查询表中所有的记录(包含所有列);
select * from 表名;
(2)自定义查找表中的记录信息(非所有列):
select column1,column2 from 表名;
实例:
select * from customers;
select name,age from 表名;
25.用一个表去填充另一个表:
insert into 第二个表名
(column1,column2,...,columnN) select column1,column2,...,columnN from 第一个表
实例:
create table customers_2(ID INT,NAME VARCHAR(20),AGE INT,ADDRESS CHAR(25),SALARY DECIMAL(18,2));
insert into customers_2
(ID,NAME,AGE,ADDRESS,SALARY) select ID,NAME,AGE,ADDRESS,SALARY from customers;
26.指明操作符
代数:+-*/%
比较:=,!=,<>(不等于),>,<,>=,<=,!<,!>
逻辑:ALL , AND , ANY , BETWEEN , EXISTS ,
IN , LIKE , NOT , OR , IS NULL , UNIQUE
AND & OR:
select column1,column2,...columnN from 表名 where 条件1 and 条件2...and 条件N;
select column1,column2,...columnN from 表名 where 条件1 or 条件2...or 条件N;
27.where 条件语句(查询,修改,删除使用)
select column1,column2,...,columuN from 表名 where 条件;
实例:
select * from customers where name = 'Ann';
实例:
选择customers表中,工资大于等于4000的顾客的姓名,地址,工资信息
select name,address,salary from customers where salary >= 4000;
实例:
select name,salary from customers where salary > 2000 and age <35;
练习:
查询年龄大于24,工资大于5000或者小于3000的人的姓名,年龄,工资
select name,age,salary from customers where age > 24 and salary >5000 or salary < 3000;
select name,age,salary from customers where not(age > 24 and salary >5000 or salary < 3000);
注意:切记写
select name,age,salary from customers where not(age > 24) and salary >5000 or salary < 3000;
结果中往往没有实现not(age > 24) #@@@@@@@@@@@@@@@@@@@@@@@@@@@
28.查看当前库
select database();
实例:
mysql> select database();
+------------+
| database() |
+------------+
| schools |
+------------+
1 row in set (0.00 sec)
==========================================================================
练习:
创建数据库:schools
使用该数据库;
创建表students,其中字段包括:
id int,name varchar(20),gender char(20),age int
往表中插入几条学生信息,要求用不同的方法进行插入:
首先插入一条数据,后同时插入多条数据,
创建一个新表叫做students_copy,
再复制students表到新表students_copy,选择性别为女,并且年龄大于20岁的学生,将这些学生的插入到新生成的表students_copy
提示:
insert into
select ...from
where ...and
解:
create table students(id int,name varchar(20),gender char(20),age int
);
insert into students (id,name,gender,age) values (1,'yuxiu','F',24);
insert into students values (2,'yuanchenzhi','M',22);
insert into students (age,gender,name,id) values (19,'M','zhangyu',3);
insert into students (id,name,gender,age) values (4,'limingxia','F',19),(5,'zuoting','F',21),(6,'cuillixia','F',23);
create table students_copy(id int,name varchar(20),gender char(20),age int
);
insert into students_copy (id,name,gender,age) select id,name,gender,age from students where gender ='F' and age > 20;
执行结果:
mysql> select * from students_copy;
+------+-----------+--------+------+
| id | name | gender | age |
+------+-----------+--------+------+
| 1 | yuxiu | F | 24 |
| 5 | zuoting | F | 21 |
| 6 | cuillixia | F | 23 |
+------+-----------+--------+------+
3 rows in set (0.00 sec)
mysql> select * from students;
+------+-------------+--------+------+
| id | name | gender | age |
+------+-------------+--------+------+
| 1 | yuxiu | F | 24 |
| 2 | yuanchenzhi | M | 22 |
| 3 | zhangyu | M | 19 |
| 4 | limingxia | F | 19 |
| 5 | zuoting | F | 21 |
| 6 | cuillixia | F | 23 |
| 3 | zhangyu | M | 19 |
+------+-------------+--------+------+
7 rows in set (0.00 sec)