MySQL之基础,创建库,建表,表的增删改查

数据库有很多,以MySQL5.7版本为例,MySQL的安装和配置详情链接:https://pan.baidu.com/s/1DhbxxuPmsk-cPr-egH4d9g 
提取码:7hd6 

MySQL为关系型数据库,关系库特点:

1.永久保存数据。2.供数据安全。3.提供数据并发访问。4.提供多种数据类型。5.提供事物支持。6.提供SQL语言操作数据。

数据库里面存放数据,是以库(database)为单位的。库里面又分为不同表(table),表中存放具体的数据

在搜索栏输入cmd 打开命令行,登陆MySQL。(注意所有的SQL语句一定要在命令末尾加 ';'

1.首先建库语句为:create database 库名;

2.查看已有数据库语句为:show databases;

 

mysql> create database test2;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| test2              |
+--------------------+

1.建表时首先得用语句:use 库名;选定你要用的数据库 出现Database changed就证明数据库选定了。选定以后才可以操作该数据库,比如建表,查看表中内容等。

use test2;
Database changed

2.建表用 create table 表名(表中数据库类型);

create table student(
    -> sid int,
    -> sname varchar(10)
    -> );
Query OK, 0 rows affected (0.47 sec)

创建表中的数据类型格式:自定义名 数据类型名

数据类型有 int    char(固定长度)    varchar(可变长度)等

可以定义键值(primary key),数据自增(auto_increment),不为空(not null)等。

键可以保证数据唯一,自增可以保证数据自动添加.有序

mysql> create table student2(
    -> sid int primary key auto_increment,
    -> sname varchar(10))
    -> auto_increment=10;
Query OK, 0 rows affected (0.44 sec)

表创建好了之后就可以对表进行操作。

3.查看此库中的所有的表的语句:show tables;用此语句查看此库中的所有表。

mysql> show tables;
+-----------------+
| Tables_in_test2 |
+-----------------+
| student         |
+-----------------+

4.查看表中数据的数据类型语句:desc 表名

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid   | int(11)     | YES  |     | NULL    |       |
| sname | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

可以看出刚才创建表时,定义的表中的数据是数据类型,以及主键,是否可以为空,默认等信息。

5.创建表后,可以修改表的结构,alter语句

添加列:alter table 表名 add 列名 数据类型; 

修改列: alter table 表名 modify 列名 新类型; 

删除列 alter table 表名 drop 列名;

举例,增加一列score,修改列的类型,删除score列

mysql>alter table student  add score int;
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid   | int(11)     | YES  |     | NULL    |       |
| sname | varchar(10) | YES  |     | NULL    |       |
| score | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
mysql> alter table student modify score char;
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid   | int(11)     | YES  |     | NULL    |       |
| sname | varchar(10) | YES  |     | NULL    |       |
| score | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
mysql> alter table student drop score;
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid   | int(11)     | YES  |     | NULL    |       |
| sname | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

6.往表中插入数据(要根据建表时定义的数据类型和数据个数插入数据)

格式为:insert into 表名(列1,列2...)values(值1,值2...)

insert into student(sid,sname) values(1,'Mr.Wang');

7.更新数据,update 表名 set 列名=新值 where 条件(不加条件的就是更改所有的符合条件的值)

update student set sid=4 where sid =3;
Query OK, 2 rows affected (0.31 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from student;
+------+----------+
| sid  | sname    |
+------+----------+
|    1 | Mr.Wang  |
|    2 | Mrs.Yang |
|    4 | Mr.Wang  |
|    4 | 张三     |

8.查看表中的数据的命令格式:select 要查看的数据名  from  表名;(*代表所有的数据)

select sid from student;
+------+
| sid  |
+------+
|    1 |
|    2 |
|    3 |
|    3 |
+------+
select * from student;
+------+----------+
| sid  | sname    |
+------+----------+
|    1 | Mr.Wang  |
|    2 | Mrs.Yang |
|    3 | Mr.Wang  |
|    3 | 张三     |
+------+----------+

也可以根据条件看自己想要的数据,这些条件语句有,order  by(排序),group by(分组)having(分组选择条件),limit(限制),where(条件)

(1)条件  where 

可以加 : = 等值匹配    != 不等值匹配   > 大于  < 小于  >= 大于等于  <= 小于等于  比如选择sid=1的数据:

 select * from student where sid=1;
+------+---------+
| sid  | sname   |
+------+---------+
|    1 | Mr.Wang |
+------+---------+

可以加:逻辑与(两个条件同时成立)and。逻辑或(两个条件有一个成立,结果就是真) or 。 逻辑非 (条件取反) not

select * from student where sid=1 and sname='Mr.Wang';
+------+---------+
| sid  | sname   |
+------+---------+
|    1 | Mr.Wang |
+------+---------+

可以加:between 值1 and 值2  等价于   列 >= 值1 and 列 <= 值2    (注意小值要在前面,包含边界的值)

              in (值1,值2,... 值n) 等价于   列=值1 or 列=值2 ... or 列=值n    (注意值列表的长度)

              like 模糊查询  其中匹配通配符 % 表示匹配0~多个任意字符    通配符 _ 表示匹配1个任意字符
              也可以于not配合 比如 not like

select * from student where sid>1 and sid<3;
+------+----------+
| sid  | sname    |
+------+----------+
|    2 | Mrs.Yang |
+------+----------+
1 row in set (0.00 sec)

mysql> select * from student where sid between 1 and 2;
+------+----------+
| sid  | sname    |
+------+----------+
|    1 | Mr.Wang  |
|    2 | Mrs.Yang |
+------+----------+

select * from student where sid in(1,2);
+------+----------+
| sid  | sname    |
+------+----------+
|    1 | Mr.Wang  |
|    2 | Mrs.Yang |
+------+----------+

select * from student where sname like 'Mr%';
+------+----------+
| sid  | sname    |
+------+----------+
|    1 | Mr.Wang  |
|    2 | Mrs.Yang |
|    3 | Mr.Wang  |
+------+----------+

(2)分组  group by having (分组条件)

select sid from student group by sid having sid>1 ;
+------+
| sid  |
+------+
|    2 |
|    3 |
+------+

表示先以sid为条件把student表分组,在选择sid>1的sid,也可以不用加having选择

分组group by 分组条件后面可以加多个条件。比如 group by sid,sname

分组条件也可以加函数:
 count(*)  表示求每组的个数     max(列) 求最大值   min(列) 求最小值
 sum(列) 求和      avg(列) 求平均值

下面举例:先以sid为条件把student表分组,再计算每个分组的个数,最后选择出分组中数据个数大于1的。

select sid,count(*) from student group by sid having count(*)>1 ;
+------+----------+
| sid  | count(*) |
+------+----------+
|    3 |        2 |
+------+----------+

(3)排序  order by  数据名 [参数] 。参数 有两种  desc升序排序  asc降序排序 (不加参数,默认为asc)

select sid from student order by sid desc;
+------+
| sid  |
+------+
|    3 |
|    3 |
|    2 |
|    1 |
+------+

表示根据sid升序排序

(4)限制 limit()结合分组,排序等语句使用 表示根据sid升序排序后,在输出前三个数据

select sid from student order by sid desc limit 3;
+------+
| sid  |
+------+
|    3 |
|    3 |
|    2 |
+------+

(5)以上语句可以结合使用:执行为顺序为:

  where > group by > having > select > order by > limit 

 

库不用了可以删除,删库已有的库语句为:drop database 库名;(危险操作)

常用函数:

Numeric Functions 数学函数
    rand() 生成一个从[0.0 ~ 1.0) 之间的随机小数, 小于1.0
    floor() 舍去小数
    round() 四舍五入

String Functions 字符串函数
    left(字符串, n)  n代表从左边要截取的字符
    lower()
    upper()
    substr(字符串,下标, 长度) 下标从1开始
    求字符串长度char_length(name)=n;

Date and Time Functions 日期函数
    year() 截取年份
    month()
    date()
    date_add(日期 时间间隔); 其中时间间隔的语法:interval n 单位
    select empno,ename,date_add(hiredate, interval 1 month ),hiredate from emp; 加一个月
    select empno,ename,date_add(hiredate, interval 3 day ),hiredate from emp; 加3天
    SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 13:02:03'); 提取日期中的从天到分钟的部分
    select now() 获取当前时间
 

导入数据

1.load data infile '文件路径\文件名字' into table 表名;外部文本文件的内容导入到数据库表中

要让load data命令生效,必须修改设置:在my.ini文件添加
secure-file-priv=

2.source 文件路径/文件名

导出数据

1. cmd > mysqldump -uroot -p 库名 >> 要保存的文件.sql  (source的逆操作, 内部是sql语句)
2. 把表中的数据保存到文本文件中 (load data infile的逆操作)
 select * from 表 into outfile '文件路径\文件名'

几种连接查询

表1 inner join 表2 on 连接条件  (内连接:两张表的记录必须完全满足连接条件,才会出现在最后结果中)
表1 left outer join 表2 on 连接条件  (左外连接)
表1 right outer join 表2 on 连接条件  (右外连接)
left outer join 位于连接左侧的表,不管是否连接到了记录,都会出现在结果中
    符合连接条件的记录,和内连接效果一样
    不符合连接条件的记录,对应另一张表的列都是null值


right outer join 位于连接右侧的表,不管是否连接到了记录,都会出现在结果中

outer可以省略
 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值