01-mysql入門
MySQL語句分類
1.DDL 數據庫定義語言 影響數據結構的,增刪改查庫或表
2.DML 數據庫操作語言 操作數據,對表中數據的增刪改查
3.DCL 數據庫控制語言 創建用戶,管理用戶權限,事務控制
非標準分類:DQL 數據庫查詢語言,把對數據的增刪改查中的查單獨提出來
先看幾張圖,對數據庫結構有個大概的了解
- 為什么要學數據庫
1>實現數據共享
2>減少數據的冗余度
3>數據實現集中控制
4>數據一致性,完整性和可維護性,以確保數據的安全性和可靠性
5>故障恢復
常用數據庫分類
1.MySQL
MySQL是最受歡迎的開源SQL數據庫管理系統,它由 MySQL AB開發、發布和支持。MySQL AB是一家
基于MySQL開發人員的商業公司.MySQL是一個關系數據庫管理系統。MySQL是開源的。已經被Oracle收購。
2.SQL Server
SQL Server是由微軟開發的數據庫管理系統,它只能在Windows上運行.
3.Oracle
提起數據庫,第一個想到的公司,一般都會是Oracle(甲骨文)。該公司成立于1977年,
最初是一家專門開發數據庫的公司。Oracle在數據庫領域一直處于領先地位。 Oracle數據庫成為世界上使用最廣泛的關系數據系統之一
4.Sybase(隱退)
提起數據庫,第一個想到的公司,一般都會是Oracle(甲骨文)。該公司成立于1977年,最初是一家專門開發
數據庫的公司。Oracle在數據庫領域一直處于領先地位。 Oracle數據庫成為世界上使用最廣泛的關系數據系統之一。
5.DB2
IBM 開發的,收費
MySQL中的注解
1.單行: –
2.多行: /**/
- MySQL不區分大小寫嗎?
語句不區分大小寫,數據區分大小寫
- 如何連接數據庫?
進入dos系統,輸入mysql -u root -p 回車 提示輸入密碼,密碼輸入之后,即可建立連接(注意MySQL中的sql的結束用”;”號結束)
數據庫定義語言(庫的操作) DDL
1.創建一個庫
create database 庫名稱 [character set 碼表名稱 collate 字符校對集名稱]
例如:create database day15;
1>看到Query OK, 1 row affected (0.00 sec) 表示執行成功.
2>sql語句語法: 結尾應使用";"號.
3>字符校對集: 決定數據排序的。
2.顯示mysql中都有哪些庫了?
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| day13 |
| mysql |
| performance_schema |
| test |
+--------------------+
可以看到除了自己創建的庫之外,還有一些其他庫。其他庫(除了test)不要亂動。因為是保存mysql的配置信息,賬戶信息等等。
test庫 : 自動創建用于測試的
3.刪除一個數據庫
drop database 數據庫名稱;
drop database day15;
4.修改數據庫碼表和字符校對(不常用)
alter database 數據庫名稱 character set 數據庫碼表 [collate 校對集名稱];
alter database day15 character set utf8 collate utf8_bin;
5.當前要使用的庫 (重點)
use 庫名
use day15;
出現Database changed,說明切換完成.
6.查看當前選擇的數據庫
select database();
+------------+
| database() |
+------------+
| day15 |
+------------+
7.顯示創建庫語句
show create database 數據庫名稱;
show create database day15;
| day15 | CREATE DATABASE `day15`
/*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ |
DDM總結
創建庫 create database 庫名 [character set 碼表 collate 字符校對集]
顯示所有庫 show databases;
刪除庫 drop database 庫名;
修改數據庫碼表 alter database 庫名 character set 碼表 collate 字符校對集
使用數據庫 use 庫名
查看當前使用的庫 select database();
顯示創建庫語句 show create database 庫名;
數據庫中的數據類型 (了解,知道在什么情況下應該使用什么類型的數據)
1.數字型
整型
TINYINT 1字節 byte
SMALLINT 2字節 short
MEDIUMINT 3字節
(常用)INT 4字節 int
BIGINT 8字節 long
浮點型
FLOAT 單精度4字節 float
(常用)DOUBLE 8字節 double
DECIMAL 沒有精度損失
DOUBLE 和 DECIMAL 區別?
DOUBLE類型在運算時會有精度的缺失。
DECIMAL 就是解決精度缺失問題的。(底層使用字符串來保存數字)
單純想表示小數屬性時,使用double。
需要頻繁參與運算的小數,使用decimal。
2.字符串類型
注意: 字符串類型要使用單引號包裹.
1>短字符串類型 CHAR/VARCHAR (最大長度255字節)
問題:char和varchar有什么區別?
char定長字符串.varchar表示變長字符串.
同時指定長度為10。當存儲 abc
char =》 'abc '
varchar => 'abc'
結論: 開發中varchar用的最多。 char只在表示固定長度的枚舉中使用。例如 :性別(用01,02表示)
2>長字符串類型(流類型)
TEXT/CLOB 保存文本(字符流) --> 當要保存的內容超過255字節時使用. java中的writer 字符
BLOB 保存字節(字節流) --> 開發中用不到 java中的stream 字節
Character Large Object
binary Large Object
區別:
text:只能存儲字符數據.
BLOB:可以存儲字符和多媒體信息(圖片 聲音 圖像)
3.日期和時間類型
date 只記錄日期 2015-01-14
time 只記錄時間 11:36:25
year 只記錄年 2015
datatime 又記錄日期 又記錄 時間 2015-01-14 11:36:25
timestamp 同上 2015-01-14 11:36:25
問題: datatime 和 timestamp 區別?
這兩種類型記錄的數據是一模一樣.
區別:在于插入的時候,如果插入datatime類型時,沒有 傳值,那么該類型默認值就是null;
如果插入timestamp類型時,沒有 傳值,那么該類型默認值就是當前時間;
與創建表相關的語句(DDL 記在,能夠手寫)
(
field1 datatype 約束/主鍵約束 auto_increment,
field2 datatype 約束,
field3 datatype 約束
)[character set 字符集 collate 校對規則]
1.創建表
CREATE TABLE table_name
創建表,首先要選擇你要在哪個數據庫中創建,比如想在day15數據庫中創建一張t_user表
在命令行中輸入 use database day15; 在輸入創建表的語句即可
create table t_user(
id int,
name varchar(20),
sal double(4,3),
birthday datetime,
hiredate timestamp
);
varchar最好指定長度
整型一般不指定.
2.查看當前庫中有哪些表
show tables;
3.查看表結構
desc 表名; (description)
desc t_user;
4.刪除表
drop table 表名;
drop table t_user;
5.添加一列
alter table 表名 add 列名 類型;
alter table t_user add photo blob;
6.修改列的類型
alter table 表名 modify 列名 類型;
alter table t_user modify photo varchar(20);
7.修改列的名稱
alter table 表名 change 舊列名 新列名 數據類型;
將 photo這一列 改名為 image
alter table t_user change photo image varchar(20);
8.刪除某列
alter table 表名 drop 列名;
alter table t_user drop image;
9.修改表的名稱
rename table 舊表名 to 新名;
rename table t_user to user;
10(用的極少)修改表的字符集. (如果創建表時不指定,默認使用數據庫的字符集)
alter table 表名 character set 字符集 collate 校對集;
alter table t_user character set utf8 collate utf8_bin;
列的約束 (重點)
保證數據的完整性的.
1.非空約束(not null) 指定非空約束的列, 在插入記錄時 必須包含值.
2.唯一約束(unique) 該列的內容在表中. 值是唯一的.
3.主鍵約束(primary key) 當想要把某一列的值,作為該列的唯一標示符時,可以指定主鍵約束(包含 非空約束和唯一約束).
一個表中只能指定一個主鍵約束列.
主鍵約束 , 可以理解為 非空+唯一.
注意: 并且一張表中只能有一個主鍵約束.
作用:約束體現數據庫的完整性.
例如:創建帶有約束的表
create table t_user2(
id int primary key auto_increment, -- 員工編號
name varchar(10) not null, -- 員工姓名
loginname varchar(10) not null unique, -- 登陸名稱
password varchar(20) not null, -- 密碼
age int(3) not null, -- 年齡
birthday datetime not null, -- 生日
hiredate timestamp not null -- 入職日期
);
主鍵自動增長
注意:
1.前提某個表的主鍵是數字. 我們可以將該主鍵設置為自增.
2.使用主鍵自增可能會造成主鍵的斷層。
3.mysql,sqlserver,sqllite這三個數據庫具有該功能.
4.主鍵自增只能給主鍵約束的列加。
自增就是 每次插入記錄時不需要指定值. 該字段自己維護自己的值.
維護方式就是每次加1;
語法:
create table t_user(
id int primary key auto_increment,
password varchar(30) not null,
age int not null,
birthday datetime not null,
hiredate timestamp not null,
number int unique
);
創建修改表練習
create table employee(
id int,
name varchar(10),
gender varchar(10),
birthday datetime,
entry_date timestamp,
job varchar(5),
salary double(5,3),
resume text
);
1.在上面員工表的基礎上增加一個image列。
alter table employee add image varchar(20);
2.修改job列,使其長度為60。
alter table employee modify job varchar(60);
3.刪除gender列。
alter table employee drop gender;
4.表名改為user
rename table employee to user;
5.修改表的字符集為utf8
alter table employee character set utf8 collate utf8_bin;
alter table employee character set utf8 collate utf8_bin;
6.列名name修改為username
alter table employee change name username varchar(20);
對表中數據的增刪改(DML) (重點)
1.insert插入語句
create table t_user(
id int primary key auto_increment,
name varchar(20) not null,
email varchar(20) unique
)
1.插入一條數據
1>指定要插入哪些列
insert into t_user(name,email) values('tom','[email protected]');
注意: 數據類型為字符串類型的.需要使用單引號包裹.
2>不指定插入哪些列, 需要指定每一列的值
insert into t_user values(null,'jerry','[email protected]');
insert into t_user(name,email) values('湯姆','[email protected]');
2.update修改語句
練習一:
create table t_user(
id int primary key auto_increment,
name varchar(20) not null,
email varchar(20) unique
)
語法:update 表名 set 列名1 = 值 , 列名2 = 值 ....[where 條件1,條件2...]
1.修改表中id為3 的記錄, 將name修改為rose;
update t_user set name='rose' where id = 3;
2.將表中的name 全部修改成rose
update t_user set name='rose';
練習二:
CREATE TABLE employee (
id INT,
NAME VARCHAR(20),
gender VARCHAR(20),
birthday DATE,
entry_date DATE,
job VARCHAR(30),
salary DOUBLE,
RESUME LONGTEXT
);
>添加四條數據
INSERT INTO employee VALUES(1,'zs','male','1980-12-12','2000-12-12','coder',4000,NULL);
INTO employee VALUES(2,'ls','male','1983-10-01','2010-12-12','master',7000,NULL);
INSERT INTO employee VALUES(3,'ww','female','1985-03-08','2008-08-08','teacher',2000,NULL);
INSERT INTO employee VALUES(4,'wu','male','1986-05-13','2012-12-22','hr',3000,NULL);
1.將所有員工薪水修改為5000元
update employee set salary='5000';
2.將姓名為’zs’的員工薪水修改為3000元
update employee set salary='3000' where name='zs';
3.將姓名為’ls’的員工薪水修改為4000元,job改為Android
update employee set salary=salary+1000 where name='ls';
3.delete刪除語句(重點)
語法:delete from 表名 [where 條件];
1. 刪除表中名稱為’rose’的記錄。
DELETE FROM employee WHERE NAME='rose';
2. 刪除表中所有記錄。
DELETE FROM employee ;
3.使用truncate刪除表中記錄。
TRUNCATE TABLE employee;
DELETE 刪除 和 TRUNCATE刪除(了解) 兩者有什么區別?
首先,這兩種都是刪除表中的記錄.
不同的是:
1. delete 是逐行標記刪除. TRUNCATE 是將整張表包括表結構都移除,然后將表重新創建.
2. delete DML語句。 TRUNCATE DDL語句。
3. delete 刪除的記錄可以被恢復,TRUNCATE 不能回復。
4. delete 不釋放空間,TRUNCATE 釋放空間.
5. TRUNCATE 會提交事務.
DQL語句(DML) 查詢語句 (重點)
語法:
SELECT selection_list /*要查詢的列名稱*/
FROM table_list /*要查詢的表名稱*/
WHERE condition /*行條件*/
GROUP BY grouping_columns /*對結果分組*/
HAVING condition /*分組后的行條件*/
ORDER BY sorting_columns /*對結果排序*/
LIMIT offset_start, row_count /*結果限定*/
練習:
創建學生表:
CREATE TABLE stu ( --學生表
sid CHAR(6), -- 學生編號
sname VARCHAR(50), -- 學生姓名
age INT, -- 年齡
gender VARCHAR(50) -- 性別
);
插入數據:
INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);
創建員工表:
CREATE TABLE emp( -- 員工表
empno INT, -- 員工編號
ename VARCHAR(50), -- 員工姓名
job VARCHAR(50), -- 工作
mgr INT, -- 員工上司的編號
hiredate DATE, -- 入職日期
sal DECIMAL(7,2), -- 工資
comm DECIMAL(7,2), -- 獎金
deptno INT -- 部門編號
);
插入數據:
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
1.1 查詢所有列
select * from stu;
*號 是通配符.通配所有列. 上面語句與下面是一模一樣的
select sid,sname,age,gender from stu;
誰的效率更高?
下面的效率更高. *需要運算.
1.2 查詢所有行指定列
select sname from stu;
2.1 條件查詢介紹
條件查詢就是在查詢時給出WHERE子句,在WHERE子句中可以使用如下運算符及關鍵字:
=、!=、<>、<、<=、>、>=;
BETWEEN…AND;
IN(SET)/NOT IN(SET)
IS NULL/IS NOT NULL
//---條件連接符
AND; &&
OR; ||
NOT; !
2.2 查詢性別為女,并且年齡小于50的記錄
select * from stu where gender='female' and age<50;
2.3 查詢學號為S_1001,或者姓名為liSi的記錄
select * from stu where sid='S_1001' or sname='liSi';
注意:數據庫中,sql語句不區分大小寫 ,但是 數據區分大小寫.
2.4 查詢學號為S_1001,S_1002,S_1003的記錄
select * from stu where sid='S_1001' or sid='S_1002' or sid='S_1003';
select * from stu where sid in('S_1001','S_1002','S_1003');
2.5 查詢學號不是S_1001,S_1002,S_1003的記錄
select * from stu where not (sid='S_1001' or sid='S_1002' or sid='S_1003');
select * from stu where sid not in('S_1001','S_1002','S_1003');
2.6 查詢年齡為null的記錄
select * from stu where age=null;(錯誤)
null的特性: null不等于null 所以判斷時應如下寫法:
select * from stu where age is null;(正確)
2.7 查詢年齡在20到40之間的學生記錄
select * from stu where age >= 20 and age <= 40;
select * from stu where age between 20 and 40;
2.8查詢性別非男的學生記錄
select * from stu where gender!= 'male';
select * from stu where not gender='male';
select * from stu where gender not in ('male');
2.9 查詢姓名不為null的學生記錄
select * from stu where sname is not null;
select * from stu where not sname is null;
where 字段 like '表達式';
% => 通配 通配任意個字符.
_ => 通配 通配單個字符.
說明: LIKE 條件后 根模糊查詢表達式, "_"==> 代表一個任意字符
3.1查詢姓名由5個字母構成的學生記錄
select * from stu where sname like '_____';
3.2查詢姓名由5個字母構成,并且第5個字母為“i”的學生記錄
select * from stu where sname like '____i';
3.3 查詢姓名以“z”開頭的學生記錄
說明: "%"該通配符匹配任意長度的字符.
select * from stu where sname like 'z%';
3.4查詢姓名中第2個字母為“i”的學生記錄
select * from stu where sname like '_i%';
3.5 查詢姓名中包含“a”字母的學生記錄
select * from stu where sname like '%a%';
4.1 去除重復記錄
去除重復記錄
關鍵詞: distinct => 去除重復查詢結果記錄.
select gender from stu; ==> 出現大量重復的記錄
select distinct gender from stu; =>去除重復的記錄
4.2查看雇員的月薪與傭金之和
select sal*12+comm from emp;
null與任何數字計算結果都是null.上面的寫法是錯誤的.
使用IFNULL(參數1,參數2) 函數解決. 判斷參數1的值是否為null,如果為null返回參數2的值.
select sal*12 + IFNULL(comm,0) from emp;(正確)
注意:這個函數在所有數據庫通用嗎?
不通用.
4.3 給列名添加別名
三種寫法:
select sal*12 + IFNULL(comm,0) as '年收入' from emp;
select sal*12 + IFNULL(comm,0) '年收入' from emp;
select sal*12 + IFNULL(comm,0) 年收入 from emp;
5.1 查詢所有學生記錄,按年齡升序排序
asc: 升序
desc:降序
select * from stu order by age asc;
默認就是升序
select * from stu order by age;
5.2 查詢所有學生記錄,按年齡降序排序
select * from stu order by age desc;
5.3 查詢所有雇員,按月薪降序排序,如果月薪相同時,按編號升序排序
select * from emp order by sal desc , empno asc;
聚合函數
聚合函數是用來做縱向運算的函數:
COUNT():統計指定列不為NULL的記錄行數;
MAX():計算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運算;
MIN():計算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運算;
SUM():計算指定列的數值和,如果指定列類型不是數值類型,那么計算結果為0;
AVG():計算指定列的平均值,如果指定列類型不是數值類型,那么計算結果為0;
6.1 COUNT
當需要縱向統計時可以使用COUNT()。
1>查詢emp表中記錄數:
select count(*) from emp;
2>查詢emp表中有傭金的人數:
select count(*) from emp where comm is not null and comm >0;
3>查詢emp表中月薪大于2500的人數:
select count(*) from emp where sal > 2500;
4>統計月薪與傭金之和大于2500元的人數:
select count(*) from emp where sal+IFNULL(comm,0) > 2500;
5>查詢有傭金的人數并且有領導的人數:
select count(*) from emp where comm > 0 and mgr is not null;
6.2 SUM(計算總和)和AVG(計算平均值)
當需要縱向求和時使用sum()函數。
1>查詢所有雇員月薪和:
select sum(sal) from emp;
2>查詢所有雇員月薪和,以及所有雇員傭金和:
select sum(sal),sum(comm) from emp;
3>查詢所有雇員月薪+傭金和:
select sum(sal+IFNULL(comm,0)) from emp;
4>統計所有員工平均工資:
select avg(sal) from emp;
6.3 MAX和MIN
查詢最高工資和最低工資:
select max(sal),min(sal) from emp;
分組查詢
當需要分組查詢時需要使用GROUP BY子句,例如查詢每個部門的工資和,這說明要使用部分來分組。
1>查詢每個部門的部門編號和每個部門的工資和:
select deptno,sum(sal) from emp group by deptno;
2>查詢每個部門的部門編號以及每個部門的人數:
select deptno,count(ename) from emp group by deptno;
3>查詢每個部門的部門編號以及每個部門工資大于1500的人數:
select deptno,count(ename) from emp where sal>1500 group by deptno ;
HAVING子句
4>查詢工資總和大于9000的部門編號以及工資和:
select deptno,sum(sal) from emp group by deptno having sum(sal)>9000;
使用having在分組之后加條件.
where和having都可以加條件?
1.where在分組之前加條件.
2.having在分組之后加條件.
where的效率要遠遠高于having. 分組本身消耗資源非常大.
分頁相關知識
LIMIT(MySQL方言) (必須掌握)
LIMIT用來限定查詢結果的起始行,以及總行數。
1>查詢5行記錄,起始行從0開始
select * from emp limit 0,5;
2> 查詢10行記錄,起始行從3開始
select * from emp limit 3,10;
3>如果一頁記錄為5條,希望查看第3頁記錄應該怎么查呢?
第一頁記錄起始行為0,一共查詢5行;
select * from emp limit 0,5;
第二頁記錄起始行為5,一共查詢5行;
select * from emp limit 5,5;
第三頁記錄起始行為10,一共查詢5行;
select * from emp limit 10,5;
以上就是對MySQL的基本總結,(參考黑馬老師筆記總結)
智能推薦
Vue入門01
Hello Vue!! 每一個應用都是從創建一個實例開始的 聲明式渲染 聲明一條數據,然后利用特殊的模板語法將其渲染出來 new Vue({})—> 創建一個實例 el:""----> 聲明掛載點 {{msg}} —>模板語言 Vue遵從MVC設計模式 m:model v:view c:contoroller 例題 點擊按鈕顯示隱藏di...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
猜你喜歡
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...