MySQL笔记1

来源:互联网 发布:greenvpn网络加速器 编辑:程序博客网 时间:2024/05/29 03:41
2017/10/30 - 数据库编程 - day1
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)




































































原创粉丝点击