MySQl基础笔记

查看mysql状态的命令

systemctl status mariadb
systemctl start mariadb
systemctl stop mariadb
systemctl restart maridb

root用户下,进去mysql命令

mysql -u root -p直接跟密码 #这种方式不好,因为密码是明文输入的
mysql -u root -p
输入密码
#推荐使用这种方式,安全性好

退出命令

exit

进入数据库后,创建数据库

CREATE DATABASE database_name;
CREATE DATABASE IF NOT EXISTS database_name;

在root下,使用mysqladmin创建数据库

mysqladmin -u root -p create database_name

删除数据库

drop database database_name;
drop database IF EXISTS database_name;

在root终端下,使用mysqladmin删除数据库

mysqladmin -u root -p drop database_name

选择数据库

use `database_name` --如果database_name是特殊字符,则需要加``

mysql数据库的列类型:数值、日期/时间和字符串(字符)类型

数值

  • tinyint 一个字节
  • smallint 两个字节
  • mediumint 三个字节
  • int 四个字节(常用的)
  • bigint 八个字节
  • float 浮点数 四个字节
  • double 浮点数 四个字节(精度问题)
  • decimal 字符串形式的浮点数 (金融计算的时候)

日期

  • date YYYY-MM-DD 日期格式
  • time HH:MM:SS 时间格式
  • datetime YYYY-MM-DD HH:MM:SS (最常用的格式)
  • timestamp 时间戳(从1970年开始)

字符串

  • char 字符串固定大小的 0~255
  • varchar 可变字符串 0~65535常用的
  • tinytext 2^8-1
  • text 文本串 2^16-1

NULL

  • 没有值,未知
  • 运算的时候,不要使用NULL

数据库的字段属性(重点)

Unsigned

  • 无符号整数
  • 声明了该列不能声明为负数

zerofill

  • 0填充的
  • 不足的位数用0填充

自增

  • 通常理解为自增,自动在上一条的记录上+1(默认)
  • 通常用来设计唯一的主键 index 必须是整数类型
  • 可以自定义设置主键的起始值和步长

非空

  • not null,设置成not null 如果不赋值也会报错
  • NULL,如果不填写值,默认就是null

默认

  • 设置默认的值
  • sex,默认值为男,不指定该列的值就会采取默认的值

拓展

每一个表都必须存在以下5个字段:
/*
id 主键
`version` 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间
*/

创建数据表
通用表达式:

CREATE TABLE table_name (column_name column_type);

通过命令提示符创建表,栗子:

root@host# mysql -u root -p
Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> CREATE TABLE runoob_tbl(
   -> runoob_id INT NOT NULL AUTO_INCREMENT,
   -> runoob_title VARCHAR(100) NOT NULL,
   -> runoob_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( runoob_id )
   -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.16 sec)
mysql>
--MySQL命令终止符为分号 ; 
---> 是换行符标识,不要复制

也可以直接创建:

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
--`符号是英文输入下的反引号。即Esc底下的那个键
show create database database_name; --查看创建数据库语句
show create table table_name;--查看创建表语句
desc table;--查看表的结构

关于数据库引擎

MYISAMINNODB
事务支持×
数据行锁定×
外键约束×
全文 索引×
表空间的大小较小较大约为2倍

PS:

  • MYISAM 节约空间,速度较快
  • INNODB 安全性高,事务处理,多表多用户操作

物理空间存在的位置
本质还是文件存储。
mysql引擎在物理文件上的区别

  • InnoDB在数据库中只有一个*.frm文件,以及上级目录下的ibdata1文件
  • MYISAM对应的文件:*.frm文件(表结构定义文件) *.MYD(数据文件) *.MYI(索引文件)

设置数据库的字符集编码

charset=utf8 --mysql的默认字符集编码是Latin1,不支持中文

PS:也可以在my.ini中配置字符集编码:

character-set-server=utf8

查看所有的数据库

show databases

修改删除数据表
删除

DROP TABLE IF EXISTS table_name;-- 所有的创建和删除,最好加上判断,防止报错

修改

-- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE teacher RENAME AS teacher1
--增加表的字段 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE teacher1 ADD age INT(11)
-- 修改表的字段(重命名, 修改约束)
ALTER TABLE teacher1 MODIFY age VARCHAR(11) --修改字段类型
ALTER TABLE teacher1 CHANGE age age1 INT(1) --字段重命名
-- 删除表的字段
ALTER TABLE teacher1 DROP age1

插入数据

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

读取表的数据

select * from table_name;

查询数据

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

sql语句的注释

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

注意的点:

  • 字段名,使用``包裹
  • mysql的关键字不区分大小写,关键字建议写小写(可读性强)
  • 所有符号全部用英文

数据库语言的类型:DDL (控制语言)DML(操作语言) DQL(查询语言) DCL (控制语言)主要操作:CRUD(增删改查)
操作分类:操作数据库->操作数据库中的表->操作表中的数据
mysql数据管理

  • 外键(了解)
    1.在创建表的时候,增加约束,比较麻烦(不建议使用)定义外键,然后添加外键(执行引用)
    2.创建表的时候没有外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid FOREIGN KEY(`gradeid`) REFERENCE `grade`(`gradeid`);

PS:先删除引用别人的表,再删除被引用的表。以上都是数据库级别的物理外键,不建议使用(避免数据库过多造成影响)
最佳实践: 1.数据库只是单纯的表,只用来存储数据,行(数据)和列(字段)
2.我们想要使用多张表的数据,用程序去实现。

  • DML语言(核心:增删改)
    数据库存在的意义:数据存储、数据管理
  • 添加insert
insert into table_name (field1,field2,field3...) values ('value1','value2','value3'...)
--保证数据和字段一一对应,插入的是一行的东西
--字段和字段之间使用‘,’号隔开;如果不写字段的话就是默认的顺序
--可以同时插入多条数据,一个()是一行数据,中间用逗号隔开
  • 修改update
--修改学员的名字
UPDATE `student` SET `name`=`jack` WHRE id = 1;
--不指定条件,默认所有都改变了
--修改多个属性

条件字句where

操作符含义范围结果
=等于5=6false
<>或者!=不等于5<> 6true
>
>=
<
<=
BETWEEN…and…
AND
OR

PS:可以通过多个条件定位语句,无上限;使用的列必须是数据库的列;带着``;where筛选条件;value也可以设置变量(比如日期)

  • 删除
DELETE FROM `table_name` WHERE id = 1;

删库

--清空表
TRUNCATE `tablea_name`;

TRUNCATE和delete的区别:

  • 相同点:都能删除数据,不会删除表结构
  • 不同点:TRUNCATE重新设置自增列,计数器会归零,不会影响事务

delete删除的问题,重启数据库的现象:

  • InnoDB 自增列会从1开始(存在内存中,断电即失)
  • MYISAM 继续从上一个增量开始(存在文件中的,不会遗失)

DQL查询数据(最重点)

  • 数据库中最核心的语言
  • 简单和复杂都能做
  • 关键字是select

查询的语句

select * from table_name;--从表中查询所有的信息
select `id`,`number` from `table_name`;--查询特定的列
select `id` as 序号,`number` as 学号 from `table_name` as s;--可以给列起别名,也可以给表起别名
--函数concat(a,b)可以拼接字符串

去重的查询

select distinct `id` from `table_name`;--去重select查询出来结果中重复的数据

select的其他操作

select version(); -- 查询系统版本(函数)
select 100 + 2 as result;--用来计算(计算表达式)
select @@auto_increment;--查询自增的步长(变量)
select `grade`+1 from table_name;--将grade中的数据+1

*数据库中的表达式:*文本值、列、NULL、函数、计算表达式、系统变量
通用的表达式:select 表达式 from 表
where条件字句
检索数据中符合条件的值
逻辑运算符and;or;not(尽量使用英文字母)。

--查询95-100分之间的学生
select `number`, `grade` from result where grade>=95 and grade<=100;
--模糊查询
select `number`, `grade` from result where grade between 95 and 100;
select `number`, `grade` from result where grade>=95 && grade<=100;
--除了1000号之外的同学的成绩
select `number`, `grade` from result where grade!=1000;
select `number`, `grade` from result where not grade=1000;

模糊查询(比较运算符)

is null
is not null
between and eg:a between b and c --a是否在b和c之间
like eg:a like b
in eg:a in(a1,a2,a3,...)--in是具体的一个或者多个数
--查询姓刘的同学
select `number`, `name` from result where name like`%`--查询姓刘的同学,并且名字只有两个字
select `number`, `name` from result where name like`刘_`--查询姓刘的同学,并且名字只有三个字
select `number`, `name` from result where name like`刘__`--查询名字带有‘花’的名字
select `number`, `name` from result where name like`%%`--查询学号为1001,1002,1003的同学
select `number`, `name` from result where number in (1001,1002,1003);
--查询地址在安徽的同学
select `number`, `name` from result where address in ('安徽');
--查询地址为空的同学
select `number`, `name` from result where address="" or address is null;
--查询有出生日期的同学,即出生日期不为空的同学
select `number`, `name` from result where birthdate is not null; 

PS:更多用法,见菜鸟mysql教程和狂神mysql教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值