数据库基本知识点

1.数据库

1.定义

是按照数据结构来组织, 存储 和 管理数据的 仓库

组成:  库  database
      表  table
​
      库中包含了 表
      表中包含了 数据

2.分类

2.1 关系型数据库

MySQL, SQLServer, Oracle ...

优点:
    保持数据的一致性
    擅长做复杂数据查询
    支持事务
​
缺点:
    读写性能比 非关系的差一点.  尤其是 海量数据的高效率读写
    表结构固定, 不灵活

2.2 非关系型数据库

Redis, MongoDB, ...

优点:
    读写速度快
    格式灵活
    开源
​
缺点:
    表结构复杂, 导致复杂查询能力较弱
    不支持事务   

3.注释

/* 多行注释 * /
-- 单行
# 单行

注意: ​ 单行注释符 与 注释内容 之间至少保留一个空格

4.MySQL基础操作

使用方法:

方式一: 通过图型界面工具,如 Navicat 等

方式二: 通过在命令行敲命令来操作

2.操作数据库的步骤

连接, 打开库, 操作, 关闭退出

1.通过命令行连接MySQL

 

2. 数据库语法的特点

1) SQL 语句可以换行, 要以分号结尾

2) 命令不区分大小写. 关键字和函数建议用大写

3) 如果提示符为 '> 那么需要输入一个'回车

4) 命令打错了换行后不能修改, 可以用 \c 取消

 

3. 数据表操作

数据库管理系统中, 可以有很多, 每个数据库中可以包括多张数据

3.操作数据库的步骤

数据库常见命令

  1. 设置密码 set password = password('密码')

  2. 查看数据库

    show databases;  复数
  3. 创建数据库

        create database ` 库名 `;
        create database if not exists ` 库名 `;
        create database if not exists ` 库名 ` default charset=编码;
        
    注意:
        1) 编码不要写成utf-8,  写成 utf8, 中间没有 "-".
        2) if not exists 判断库若存在 , 则不创建
                              库若不存在, 则创建
        3) 反引号 具有屏蔽关键字的作用. 
            推荐:  库名, 表名, 字段名 最好都加上反引号
    create database `p4`;
    create database if not exists `p4`;
    create database if not exists `p4` default charset=utf8;
    create database p5;
    create database create;
    create database `create`;
  4. 删除数据库

    drop database `库名`;
  5. 使用数据库

    use `库名`;
    注意:
        在使用 表之前, 必须先使用 库
  6. 查看数据表

show tables;
  1. 创建数据表

    create table if not exists `表名`(
                `字段名`   字段类型    字段属性,
                `字段名`   字段类型    字段属性,
            ...
                `字段名`   字段类型    字段属性        (最后一个字段的分号, 不能写)
        )engine=引擎 default charset=编码;

MySQL字段类型

数值类型

tinyint 1字节 可以表示 0-255 (无符号) 可以表示 -128 ~ 127 (有符号)

int 4字节 无符号(0,4 294 967 295) 有符号 (-2 147 483 648,2 147 483 647)

decimal 以字符串形式存储的浮点数 decimal(5, 2) 表示数值总共5位, 小数占2位

日期和时间类型

datetime 8字节 1000-01-01 00:00:00 -- 9999-12-31 23:59:59

字符串类型

char 定长字符串 char(7) 不管实际插入多少字符, 它都会占用7个字符位置(中文一个汉字也是一个位置)

varchar 变长字符串 varchar(7) 如果实际插入4个字符, 那么它只占4个字符位置

text 这种类型用来存放超大文本

enum 枚举类型( 多选一 ) sex enum('w','m','x') 代表sex这个字段, 可以取 'w', 'm', 'x' 中的一个值

MySQL引擎

#MyISAMInnoDB
事务NoYes
全文索引YesNo 可用Sphinx代替
表总行数存储 count() 可直接获取 count() 若带where条件, 则会遍历整表, 消耗巨大未存储 当场遍历整表, 消耗巨大
CURD擅长R (read), 查询数据擅长CUD 增(create) 删(delete) 改(update)
行表锁表锁 开销小, 加锁快, 低并发行锁 (默认) , 表锁 开销大, 加锁慢, 易死锁, 高并发
区别:
InnoDB类型的表数据 增 删 改速度 没有MyISAM的快,但支持事务,相对 安全
MyISAM类型中的表数据增 删 改速 度快,不支持事务,没有InnoDB安全

MySQL字段属性

属性属性名描述
PRIMARY KEY主键索引主键数据不能为空 主键数据不能重复
UNIQUE唯一索引索引数据不能重复 索引数据可以为NULL. (null 不参与比较) 索引可以提高查询速度 占用磁盘空间 索引不宜太多(消耗空间, 消耗性能)
AUTO_INCREMENT自增每新增一条数据, 该字段值+1 根据记录+1, 而非已有最大值+1 不允许重复 常配合主键使用
NOT NULL非空约束该字段必须有值
NULL空约束该字段可以不给值
DEFAULT默认值没有给该字段赋值时, 则自动采用默认值
UNSIGNED无符号没有正负号, 即没有负数
COMMENT注释描述描述说明字段, 尤其是 开关类字段. 例如: 性别, 状态, 是否上架 ...
ZEROFILL补零显示宽度不足时, 高位用0代替 自动加上 unsigned 属性

实例

以下为创建数据表 userinfo实例:

   create table userinfo(
       id int unsigned not null AUTO_INCREMENT PRIMARY KEY,
       username varchar(255) not null,
       password char(32) not null,
       email varchar(100) not null,
       pic varchar(50) default './public/img/pic.jpg'
   )engine=innodb default charset=utf8;

 

实例解析:

如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。

AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。

PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。

ENGINE 设置存储引擎,CHARSET 设置编码。

  1. 删除数据表

    drop table `表名`;
  2. 查看表结构

    desc `表名`;
  3. 查看建表语句

    show  create  table `表名`;

4.修改表结构

alter table 表名 action(更改选项);

添加字段:

alter table 表名 add 新字段名 类型 约束 after 指定字段名;  
  • 在用户表的最后追加一个num字段 设置为 int not null

alter table userinfo add num int not null;
  • 在用户表的email字段后添加一个age字段,设置int not null default 20;

alter table userinfo add age int not null default 20 after  email;

删除字段:

alter table 表名 drop 被删除的字段名    
  • 删除user表的aa字段

alter table userinfo drop num;

修改字段:

alter table 表名 change 被修改后的字段信息
  • change可以修改字段名

alter table userinfo change age age_new int;

添加索引:

  • 为user表中的email字段添加普通索引,索引名为index_eamil

    alter table userinfo add index index_email(email);

删除索引:

  • 将user表中index_email的索引删除

alter table userinfo drop index index_email;

添加唯一索引:

alter table userinfo add unique uni_name(username);  

查看索引名字从建表语句中看 修改表名:

ALTER TABLE 旧表名 RENAME AS 新表名

更改表类型:

ALTER TABLE 表名称 ENGINE="InnoDB" 

MySQL数据库中的表类型一般常用两种:MyISAMInnoDB

删除数据表

删除表操作时要非常小心,因为执行删除命令后所有数据都会消 失

删除MySQL数据表的通用语法:

DROP TABLE table_name;

5.数据库记录操作 增删改查

5.1添加数据

格式: insert into 表名[(字段列表)] values(值列表...);

--标准添加(指定所有字段,给定所有的值)
mysql> insert into userinfo(id,username,password,email,pic) value('3',lisi','123','34567@qq.com',' ./public/img/pic.jpg');
​
--指定部分字段添加值
mysql> insert into userinfo(id,username,password,email) value(1,'zs','123','635665043@qq.com');
​
-- 不指定字段添加值
mysql> insert into userinfo value(null,'wangwu','2222','22@qqicom','img/1.jpg');
​
-- 批量添加值
mysql> insert into userinfo values(null,'zhaoliu','123456','22333@qqicom','img/1.jpg'),(null,'uu01','123456','22@qqicom','img/1.jpg'),
(null,'uu02','123456','22@qqicom','img/1.jpg'),
(null,'qq02','123456','22@qqicom','img/1.jpg'),
(null,'uu03','123456','22@qqicom','img/1.jpg'),
(null,'qq03','123456','22@qqicom','img/1.jpg'),
(null,'aa','123456','22@qqicom','img/1.jpg')
    
    values 和value 的区别 
    可以混用 单行vlaues快 多行value快

5.2修改数据

格式:update 表名 set 字段1=值1,字段2=值2,字段n=值n... where 条件

-- 将id为11的age改为35,sex改为m值
mysql> update stu set age=35,sex='m' where id=11;

-- 将id值为12和14的数据值sex改为m,classid改为lamp92
mysql> update stu set sex='m',classid='lamp92' where id=12 or id=14 --等价于下面
mysql> update stu set sex='m',classid='lamp92' where id in(12,14);

任务:

  • 修改id为1,2,3的数据

  • 将id为11的age改为35,sex改为0值

  • 将id值为6和9的数据值sex改为0,email改为xxx@xx.com

  • 将姓名为张三并且年龄是20的数据,密码改为747474

  • 更新年龄小于20的用户密码 为abc

update users set age='20' where id=1 or id=2 or  id=3;
update users set age="35",sex='0' where id=11;
update users set sex='0',email='xxx@xx.com' where id=6 or id=9;
update users set pssword='74747' where username="张三"  and age=20;
update users set pssword='abc' where age<'20';

5.3删除数据

格式:delete from 表名 [where 条件]

-- 删除stu表中id值为100的数据
mysql> delete from stu where id=100;
Query OK, 0 rows affected (0.00 sec)

-- 删除stu表中id值为20到30的数据
mysql> delete from stu where id>=20 and id<=30;
Query OK, 0 rows affected (0.00 sec)

-- 删除stu表中id值为20到30的数据(等级于上面写法)
mysql> delete from stu where id between 20 and 30;
Query OK, 0 rows affected (0.00 sec)

-- 删除stu表中id值大于200的数据
mysql> delete from stu where id>200;
Query OK, 0 rows affected (0.00 sec)

6.MySQL 数据操作 DQL

数据的DQL操作:数据查询

格式:

    select [字段列表]  |  *  from 表名

    [where 搜索条件]

    [group by 分组字段 [having 子条件]]

    [order by 排序 asc|desc]

    [limit 分页参数]

6.1基础查询

mysql> select * from stu;
+----+----------+-----+-----+---------+
| id | name     | age | sex | classid |
+----+----------+-----+-----+---------+
|  1 | zhangsan |  20 | m   | lamp138 |
|  2 | lisi     |  20 | m   | lamp138 |
|  3 | wangwu   |  21 | w   | lamp138 |
|  4 | zhaoliu  |  25 | w   | lamp94  |
|  5 | uu01     |  26 | m   | lamp94  |
|  6 | uu02     |  28 | w   | lamp92  |
|  7 | qq02     |  24 | m   | lamp92  |
|  8 | uu03     |  32 | m   | lamp138 |
|  9 | qq03     |  23 | w   | lamp94  |
| 10 | aa       |  19 | m   | lamp138 |
| 11 | sad      |  35 | m   | lamp94  |
| 12 | tt       |  25 | m   | lamp92  |
| 13 | wer      |  25 | w   | lamp94  |
| 14 | xx       |  25 | m   | lamp92  |
| 15 | kk       |   0 | w   | lamp94  |
+----+----------+-----+-----+---------+
15 rows in set (0.00 sec)

6.2where条件查询

  • 你可以在 WHERE 子句中指定任何条件。

  • 你可以使用 AND 或者 OR 指定一个或多个条件。

  • WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。

  • WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。

1. 查询班级为lamp138期的学生信息
mysql> select * from stu where classid='lamp138';

2. 查询lamp138期的男生信息(sex为m)
mysql> select * from stu where classid='lamp138' and sex='m';

3. 查询id号值在10以上的学生信息
mysql> select * from  stu where id>10;

4. 查询年龄在20至25岁的学生信息
mysql> select * from stu where age>=20 and age<=25;
mysql> select * from stu where age between 20 and 25;

5. 查询年龄不在20至25岁的学生信息
mysql> select * from stu where age not between 20 and 25;
mysql> select * from stu where age<20 or age>25;

6. 查询id值为1,8,4,10,14的学生信息
select * from stu where id in(1,8,4,10,14);
mysql> select * from stu where id=1 or id=8 or id=4 or id=10 or id=14;

7. 查询lamp138和lamp94期的女生信息
mysql> select * from stu where classid in('lamp138','lamp94') and sex='w';
mysql> select * from stu where (classid='lamp138' or classid='lamp94') and sex='w

6.3LIKE 子句

WHERE 子句中可以使用等号=来设定获取数据的条件,如 "runoob_author = 'RUNOOB.COM'"。

但是有时候我们需要获取 runoob_author 字段含有 "COM" 字符的所有记录,

这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。

LIKE 子句中使用百分号%字符来表示任意字符,类似于UNIX或正则表达式中的星号*。

如果没有使用百分号%, LIKE 子句与等号=的效果是一样的。

LIKE 通常与 % 一同使用,类似于一个元字符的搜索。 你可以使用 AND 或者 OR 指定一个或多个条件。 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。 可以使用regexp正则来代替 like

--9. 查询name字段值是以zh开头的所有信息
mysql> select * from stu where name like "zh%";
mysql> select * from stu where name regexp  "^zh"; --正则写法
+----+----------+------+-----+---------+
| id | name     | age  | sex | classid |
+----+----------+------+-----+---------+
| 14 | zhangle  |   29 | m   |       5 |
|  1 | zhangsan |   20 | w   |       1 |
|  4 | zhaoliu  |   21 | m   |       4 |
+----+----------+------+-----+---------+
3 rows in set (0.00 sec)

--10.查询姓名name中含有ang子串的所有信息
mysql> select * from stu where name like "%ang%";
mysql> select * from stu where name regexp  "ang";
+----+-----------+------+-----+---------+
| id | name      | age  | sex | classid |
+----+-----------+------+-----+---------+
|  1 | zhangsan  |   20 | w   |       1 |
|  3 | wangwu    |   22 | w   |       5 |
| 10 | xiaozhang |   19 | w   |       1 |
| 13 | wangwen   |   27 | w   |       2 |
| 14 | zhangle   |   29 | m   |       5 |
+----+-----------+------+-----+---------+
5 rows in set (0.01 sec)

6.4limit 关键字 查据

-- 例如: .... limit m; 查询数据只显示前m条

-- 例如: .... limit m,n; 排除前m条,然后再查询出前n条

-- 查询前5条信息
mysql> select * from stu limit 5;
+----+----------+------+-----+---------+
| id | name     | age  | sex | classid |
+----+----------+------+-----+---------+
|  1 | zhangsan |   20 | w   |       1 |
|  2 | lisi     |   25 | m   |       2 |
|  3 | wangwu   |   22 | w   |       5 |
|  4 | zhaoliu  |   21 | m   |       4 |
|  5 | uu01     |   27 | w   |       1 |
+----+----------+------+-----+---------+
5 rows in set (0.00 sec)

-- 排除前2条后再获取4条信息
mysql> select * from stu limit 2,4;
+----+---------+------+-----+---------+
| id | name    | age  | sex | classid |
+----+---------+------+-----+---------+
|  3 | wangwu  |   22 | w   |       5 |
|  4 | zhaoliu |   21 | m   |       4 |
|  5 | uu01    |   27 | w   |       1 |
|  6 | uu02    |   25 | m   |       2 |
+----+---------+------+-----+---------+
4 rows in set (0.00 sec)

-- 以4条数据分一页,取第一页。
mysql> select * from stu limit 0,4;
+----+----------+------+-----+---------+
| id | name     | age  | sex | classid |
+----+----------+------+-----+---------+
|  1 | zhangsan |   20 | w   |       1 |
|  2 | lisi     |   25 | m   |       2 |
|  3 | wangwu   |   22 | w   |       5 |
|  4 | zhaoliu  |   21 | m   |       4 |
+----+----------+------+-----+---------+
4 rows in set (0.00 sec)

-- 以4条数据分一页,取第二页。
mysql> select * from stu limit 4,4;
+----+------+------+-----+---------+
| id | name | age  | sex | classid |
+----+------+------+-----+---------+
|  5 | uu01 |   27 | w   |       1 |
|  6 | uu02 |   25 | m   |       2 |
|  7 | uu03 |   28 | w   |       2 |
|  8 | uu05 |   22 | m   |       4 |
+----+------+------+-----+---------+
4 rows in set (0.00 sec)

-- 以4条数据分一页,取第三页。
mysql> select * from stu limit 8,4;
+----+-----------+------+-----+---------+
| id | name      | age  | sex | classid |
+----+-----------+------+-----+---------+
|  9 | xiaoli    |   29 | w   |       2 |
| 10 | xiaozhang |   19 | w   |       1 |
| 11 | xiaoyan   |   22 | m   |       2 |
| 12 | xiaoxin   |   28 | w   |       4 |
+----+-----------+------+-----+---------+
4 rows in set (0.00 sec)


-- 以4条数据分一页,取第四页。
mysql> select * from stu limit 12,4;
+----+---------+------+-----+---------+
| id | name    | age  | sex | classid |
+----+---------+------+-----+---------+
| 13 | wangwen |   27 | w   |       2 |
| 14 | zhangle |   29 | m   |       5 |
+----+---------+------+-----+---------+
2 rows in set (0.00 sec)

7.数据导出

-- 将lamp138库导出
D:\>mysqldump -u root -p lamp138 >lamp138.sql
Enter password:
---- 将lamp138库中的stu表导出
D:\>mysqldump -u root -p lamp138 stu >lamp138_stu.sql
Enter password:

8.数据导入

-- 将lamp138库导入
D:\>mysql -u root -p lamp138<lamp138.sql
Enter password:
-- 将lamp138库中stu表导入
D:\>mysql -u root -p lamp138<lamp138_stu.sql
Enter password:

9.MySQL忘记root密码

windows

 1.结束正在运行的数据库服务器进程 mysqld.exe
 2.在DOS命令行执行 mysqld --skip-grant-tables
 3.再打开一个DOS窗口, 可直接输入 mysql 以管理员的身份强行进入.
 4. use mysql
 5. update user set authentication_string=password('新密码') where user='root';
 6. 刷新权限 flush privileges;

10.退出MySQL

exit; 或者 quit;

 

作业:

1.设计一个用户表,表结构有id,nickname, pwd, tel, sex, birthday, address, status, regtime

id为自增主键且唯一性并且插入5条数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值