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可以省略
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值