虽然每天和数据库打交道,但是对这个老伙计真的是不太了解,今天早上看到一篇文章说不推荐使用关系型数据库,咦,好像现在大部分使用的都是关系型数据库啊,那篇文章的点赞率还是蛮高的,难道是我对关系型数据库有什么误解么?于是上维基看看,我接触的大部分都是关系型数据库,于是又把那篇文章看了一遍,关于他说的关系型数据库存在一堆问题,但是我实在没怎么用过其他的数据库
,感受不到这些。弱弱的看大佬们在文章下面激烈的讨论。
看来这哥们对关系型数据库有很大的怨念啊,像我这样的弱鸡,让用哪个就用哪个,反正都不会用。
笔记
抛开大佬们的怨念,回到弱鸡的小巢中,日常记录下小笔记。
最近sql用的比较多,嗯,凭借之前渣渣的sql已经不能蒙混过关了,得充点电,不然就要暴露了。
刚刚和新来的同事聊了聊git,哈哈哈 ,看到他遇到和我之前差不多的问题,然后对冲突一脸懵逼,作为老鸟的我,忍不住得瑟下,告诉他,你踩的坑姐姐都踩过,哈哈哈哈,不过我下次得记下git的笔记了,感觉一段时间过去了,好像又忘的差不多了,可怕的老年记忆。
主要看了看基本的sql语句,当年的数据库课真的都是睡过去啊,看到约束和foreign以及alter和drop的时候,哇咔,这玩意哪来的,我居然都没看过,只会curd的渣渣,没文化真可怕。
不过今天主要是了解了下1:1 1:n n:n是啥玩意,当时看到这几个比例,懵逼了,哦,原来是建表时的关联。这个我还是用到过一些,soga,就是各个表之间的关联,嗯,了解下。举了个栗子,不过显然,是copy网上的栗子,真是懒,这么懒怎么学好?
mysql> SHOW DATABASES;
mysql> USE yourdatabse;
mysql> CREATE TABLE product_details (
productID INT UNSIGNED NOT NULL,
comment TEXT NULL,
PRIMARY KEY (productID),
FOREIGN KEY (productID) REFERENCES products (productID)
);
mysql> CREATE TABLE IF NOT EXISTS products (
productID INT UNSIGNED NOT NULL AUTO_INCREMENT,
productCode CHAR(3) NOT NULL DEFAULT '',
name VARCHAR(30) NOT NULL DEFAULT '',
quantity INT UNSIGNED NOT NULL DEFAULT 0,
price DECIMAL(7,2) NOT NULL DEFAULT 99999.99,
supplierID INT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (productID)
);
mysql> UPDATE products SET supplierID = 501;
如果有另一个名为product_details的表,并连接具有一对一关系的产品,如图所示,该怎么办?
写个外键
mysql> INSERT INTO product_details VALUES (1001, ‘good one’);
mysql> SELECT products.productID,price,product_details.comment
FROM products
JOIN product_details ON products.productID
= product_details.productID
WHERE price < 5;
假设每个产品都有一个供应商,每个供应商提供一个或多个产品,供应商 - 产品基于1-n关系模型。要实现1-n关系,只要确保不超过ROW与同一产品的关系,技术上就与1-1关系相同。
要将产品子表的supplierID列的外键添加到供应商父表:
mysql> UPDATE products SET supplierID = 501;
mysql> ALTER TABLE products
ADD FOREIGN KEY (supplierID) REFERENCES suppliers (supplierID);
它与编写INT列相同
mysql> INSERT INTO products VALUES
(1001, 'PEN', 'Pen Red', 5000, 1.23, 503);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT products.name, price, suppliers.name
FROM products
JOIN suppliers ON products.supplierID = suppliers.supplierID
WHERE price < 5;
假设一个产品有很多供应商;供应商以所谓的多对多关系供应许多产品。对于多对多关系,它需要第三个表称为联结表。
mysql> CREATE TABLE products_suppliers (
productID INT UNSIGNED NOT NULL,
supplierID INT UNSIGNED NOT NULL,
-- Same data types as the parent tables
PRIMARY KEY (productID, supplierID),
-- uniqueness
FOREIGN KEY (productID) REFERENCES products (productID),
FOREIGN KEY (supplierID) REFERENCES suppliers (supplierID)
);
Use SELECT with JOIN to query data from the 3 tables
mysql> SELECT products.name AS `Product Name`,
price, suppliers.name AS `Supplier Name`
FROM products_suppliers
JOIN products ON
products_suppliers.productID = products.productID
JOIN suppliers ON
products_suppliers.supplierID = suppliers.supplierID
WHERE price < 5 AND products.name = "Pen Red1"
AND suppliers.name = "QQ Corp";
大概了解了关于表之间的关联,不过对于数据库啥的缓存什么的,还是暗中观察吧,明天把剩下的sql看完,又可以看其他的了,嘎嘎,真是啥都不会,回家洗洗睡咯。
■ ■■■■
Basic
基础
数组函数
array_fill_keys — 使用指定的键和值填充数组
array_fill — 用给定的值填充数组
array_filter — 用回调函数过滤数组中的单元
array_flip — 交换数组中的键和值
array_intersect_assoc — 带索引检查计算数组的交集
array_intersect_key — 使用键名比较计算数组的交集
array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引
array_intersect_ukey — 用回调函数比较键名来计算数组的交集
array_intersect — 计算数组的交集