Mysql基础(一)

Mysql是一个关系型数据库管理系统,主要是用来管理数据库的。
mysql
一个mysql下面有多个数据库
一个数据库下面一般有多个表
一张表内我们会存储多条数据

为什么要用mysql:
1:成本低
2:开源
3:体积小
4:运行快
综上所说,mysql适用于中小型企业。

sql:结构化查询语言,专门为了数据库设计的一门语言,主要用于数据库数据存储,所有的关系型数据库会遵守这个标准。
关系型数据库: 遵守sql标准的数据库
非关系型数据库: 不遵守sql标准的数据库(noSQL)

SQL的分类:
1:数据库查询语言DQL(查询数据使用)
2:数据定义语言DDL(负责数据结构的定义与删除)
3:数据操纵语言DML(主要针对数据的增,删,改)
4:数据控制语言DCL(主要用于数据库的权限控制)
5:指针控制语言CCL
6:事务处理语言TPL

mysql 的登录:
mysq -hip地址 -u账号 -p

mysql 的退出:
exit
quit

如何展示已有数据库:
show databases;
如何创建数据库:
create database 数据库名称;
如何删除数据库:
drop database 数据库名称;

CREATE 代表创建的意思
TABLE 代表表的意思
user 是我们自定义的表名

	id,name age sex 是我们自定义的列名,名称一般要求见名之意  
	int,varchar,CHAR是mysql提供的数据类型,并且需要制定长度 
	varchar(20) 代表可以存放20个字符,无论中英文都可以,varchar的存储最大大小是65532字节,我们习惯使用的字符编码  是utf-8,一个汉字3个字节,虽然在创建表的时候我们指定了varchar的长度,但是varchar会根据插入数据的时候,数据的大小 # 来自动进行空间的分配(不会超过一开始指定的空间) 
	 int(3) 按照常理来说,这是代表可以存储长度3位的数据,但是mysql中的长度限制对int无效,这就代表int后面的长度可以 不指定 
	 char(1) 代表里面可以存放1个字符, char(20) 代表里面可以存放20个字符,char在声明之后无论里面存放了多少数据,占据 # 的都是一开始指定的空间
CREATE TABLE user(
id int,
name varchar(20),
age int,
sex char(1)
);
# 查看表结构	desc 描述 
DESC user;
#删除表
DROP TABLE user;
#删除表
DROP TABLE user;
对于已经存在的表,需要增加里面的列的时候可以使用 ALTER ADD,多个ADD需要使用,分割
ALTER TABLE user ADD height int, ADD A varchar(20);

对于已经存在的表,需要删除里面的列可以使用
 ALTER DROP COLUMN ALTER TABLE user DROP COLUMN height, DROP COLUMN A;

最基本的查询

SELECT 代表查询的意思 代表的是全部的列
FROM 代表从哪里查询
user 代表我们需要查询的表 SELECT * FROM user;
如果只想查询ID 只需要将替换成ID SELECT ID FROM user;
如果只想查询ID,NAME 只需要将# 替换成ID NAME SELECT ID,NAME FROM user;
MYSQL 中插入数据有三种方式
第一种,按照所有列的顺序来插入全部的值 insert into user values(1,‘王五’,19,‘女’);
第二种,按照指定的列来插入指定的值,在表名后面使用(列名…)来告诉数据库 values里面的值都放在哪些列中。 insert into user (id,name) values(2,‘赵六’);
mysql数据翻倍, 就是将查询出来的内容,自动添加到表中(一般用于测试) insert user SELECT * FROM user;
修改 update 代表修改的意思
set 代表设置的意思, 后面跟上需要设置的属性,以及需要设置的值,多个属性 值需要用,分割
WHERE 代表条件,只有符合条件的数据才会进行修改
UPDATE USER SET name=‘哈哈’,age=110 WHERE id=100
删除
第一种 按照指定的条件进行删除指定的行 DELETE FROM USER WHERE id=1
第二种 直接删掉表中所有数据(不能有条件) TRUNCATE TABLE USER;
第三种 直接删掉表以及数据 DROP TABLE USER;

Mysql中的约束(主要是用来约束表中的数据)
唯一约束 用来月数此列的值不能重复,
非空约束 用来约束此列的值不能为null
主键约束 唯一+非空约束
外键约束 主要用于发生了父子关系的表中,约束的是子表的添加(子表中外键的数据,在父表中必须存在),以及父表的删除
检查约束 mysql中存在,但是不好使。
(默认约束)
(自增约束)
mysql中使用约束的两种方式,1:在创建表的时候使用 2:将约束添加到已经创建好的表中
1.使用第一种方式创建一张表 要求 id 是主键 name 不能是空 sex 默认是男 电话号 要唯一

CREATE TABLE user(
id int PRIMARY KEY,
name VARCHAR(20) NOT NULL,
sex CHAR(1) DEFAULT '男',
phone VARCHAR(11)	UNIQUE
)

INSERT INTO USER VALUES(2,'李四',DEFAULT,'120');

SELECT * FROM USER;
使用第二种方式给表添加约束 要求 id 是主键	 name 不能是空	sex 默认是男	电话号 要唯一
CREATE TABLE ST(
ID INT,
NAME VARCHAR(20),
SEX CHAR(1),
PHONE VARCHAR(11)
)
-- 添加约束的关键字,还是alter
ALTER TABLE st ADD PRIMARY KEY(ID);
-- 非空约束是行级约束,所以只能通过修改列来完成
ALTER TABLE st MODIFY NAME VARCHAR(20) NOT NULL;
--  给 PHONE列添加一个唯一约束,并给约束起了个名字,方便根据异常寻找
ALTER TABLE st ADD CONSTRAINT uk_phone UNIQUE KEY(PHONE);
--  将sex设置成默认男。
ALTER TABLE st MODIFY SEX CHAR(1) DEFAULT '男';

insert into st values(1,'张三','男','123');
insert into st values(2,'李四','男','123');

-- 使用自增来让mysql自己来维护主键。
INSERT INTO USER VALUES(NULL,'李四',DEFAULT,'124');

-- 使用第二种方式为已经存在的表增加自增。
ALTER TABLE ST MODIFY ID INT(10) auto_increment

-- 外键的使用
CREATE TABLE dept2(
deptno int PRIMARY KEY auto_increment,
dname VARCHAR(20) NOT NULL,
LOC  VARCHAR(20) UNIQUE
)

CREATE TABLE EMP2(
EMPNO	INT PRIMARY KEY AUTO_INCREMENT,
ENAME VARCHAR(20),
DEPTNO INT,
FOREIGN KEY(DEPTNO) REFERENCES  (deptno)
)


insert into dept2 values(1,'开发','杭州');
insert into emp2 values(1,'张三',1);
-- 不能直接删除父表的内容,要先删除掉相关联的员工,然后再去删除掉部门。
DELETE FROM EMP2
DELETE FROM DEPT2

查询主要分为三部分组成

	CREATE TABLE `emp` (
  `EMPNO` int(4) NOT NULL,
  `ENAME` varchar(10),
  `JOB` varchar(9),
  `MGR` int(4),
  `HIREDATE` date,
  `SAL` decimal(7,2),
  `COMM` decimal(7,2),
  `DEPTNO` int(2)
);
INSERT INTO `emp` VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17', '800.00', null, '20');
INSERT INTO `emp` VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20', '1600.00', '300.00', '30');
INSERT INTO `emp` VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22', '1250.00', '500.00', '30');
INSERT INTO `emp` VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-04-02', '2975.00', null, '20');
INSERT INTO `emp` VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28', '1250.00', '1400.00', '30');
INSERT INTO `emp` VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-05-01', '2850.00', null, '30');
INSERT INTO `emp` VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-06-09', '2450.00', null, '10');
INSERT INTO `emp` VALUES ('7788', 'SCOTT', 'ANALYST', '7566', '1987-07-13', '3000.00', null, '20');
INSERT INTO `emp` VALUES ('7839', 'KING', 'PRESIDENT', null, '1981-11-17', '5000.00', null, '10');
INSERT INTO `emp` VALUES ('7844', 'TURNER', 'SALESMAN', '7698', '1981-09-08', '1500.00', '0.00', '30');
INSERT INTO `emp` VALUES ('7876', 'ADAMS', 'CLERK', '7788', '1987-07-13', '1100.00', null, '20');
INSERT INTO `emp` VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03', '950.00', null, '30');
INSERT INTO `emp` VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03', '3000.00', null, '20');
INSERT INTO `emp` VALUES ('7934', 'MILLER', 'CLERK', '7782', '1982-01-23', '1300.00', null, '10');



	我们查询出来的结果集称之为集合的投影。
select EMPNO,JOB from emp where  empno=7369
	第一部分SELECT 	 
	表示查询的意思,在后面需要跟上我们查询的列名,可以使用*来表示所有列
	第二部分 FROM 	 	
	用于指定在哪些表中进行查询,这个表可以是一个集合的投影(集合投影需要起个名字)SELECT * FROM (select EMPNO,JOB from emp where  empno=7369)  e  			
	第三部分 WHERE		用于查询条件,来进行数据的过滤。
		别名,我们可以给列,表起一些别名,更方便我们去记,在列名或表名之后使用AS 别名即可,AS可以省略不写。
select EMPNO AS '员工姓名',JOB '职位' from emp where  empno=7369
	对于我们查询出来的列,可以进行一些数值运算,以及函数操作
SELECT ENAME,SAL*2 FROM EMP

查询所有员工的年薪(13)
SELECT *,SAL*13 FROM EMP
DISTINCT 可以去重  查出员工职位有哪些
SELECT DISTINCT JOB FROM EMP
 数据库中>,<,=,>=,<=,!=,<>都是存在的
 查询工资大于1000的员工所有信息
SELECT * FROM EMP WHERE SAL>1000
    查询工资小于等于1000的员工所有信息
SELECT * FROM EMP WHERE SAL<=1000
	查询工资不等于1600的员工
SELECT * FROM EMP WHERE SAL!=1600
SELECT * FROM EMP WHERE SAL<>1600
--  查询没有奖金的员工所有信息 空不能使用=判断,必须使用 is null,
	AND 相当于Java中的&&用于多条件并行, OR 相当于Java中的|| 用于多条件选一
SELECT * FROM EMP WHERE COMM IS NULL OR COMM=0
查询奖金不等于null 的员工   不等于null 必须要使用 IS NOT NULL
SELECT * FROM EMP WHERE COMM IS NOT NULL
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小郑要做干饭人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值