روز 38 – کلید اصلی ، کلید خارجی در بانک اطلاعاتی ، انواع زبانهای SQL

کلید اصلی:
یک کلید اصلی یک ستون (یا مجموعه ای از ستون ها) در یک جدول پایگاه داده است که به طور منحصر به فرد هر رکورد را در آن جدول مشخص می کند.
*باید منحصر به فرد باشد (بدون مقادیر تکراری).
*نمی تواند مقادیر تهی داشته باشد.
*هر جدول می تواند فقط یک کلید اصلی داشته باشد.
یک جدول برای ذخیره اطلاعات کتاب با استفاده از کلید اصلی ایجاد کنید:
movie=# create table book
(book_id integer PRIMARY KEY, name text, author text);
CREATE TABLE
یک جدول برای شهروندان با اطلاعات Aadhar و PAN به عنوان یک کلید اصلی ایجاد کنید:
movie=# create table citizens(aadhar_no integer, pan_no text, name text, primary key(aadhar_no, pan_no));
CREATE TABLE
یک رکورد جدید شهروند را در جدول شهروندان وارد کنید:
movie=# insert into citizens values(123412,'g1234t','pritha');
INSERT 0 1
همیشه به عنوان هویت تولید می شود:
برای ایجاد یک ستون تقویت کننده خودکار در SQL ، از بند هویت استفاده می شود ، که هر زمان که یک ردیف جدید در جدول وارد شود ، به طور خودکار یک مقدار منحصر به فرد برای ستون ایجاد می کند.
یک جدول مشتری با شناسه مشتری تقویت کننده خودکار ایجاد کنید:
movie=# create table customers(customer_id int GENERATED ALWAYS AS IDENTITY, customer_name text not null, primary key(customer_id));
CREATE TABLE
چندین سوابق مشتری را در جدول مشتریان وارد کنید:
movie=# insert into customers(customer_name) values('guru'),('pritha'),('pritha'),('muthu');
INSERT 0 4
movie=# select * from customers;
customer_id | customer_name
-------------+---------------
1 | guru
2 | pritha
3 | pritha
4 | muthu
(4 rows)
کلید خارجی:
یک کلید خارجی یک ستون یا مجموعه ای از ستون ها است که با مراجعه به کلید اصلی جدول دیگر ، بین دو جدول رابطه برقرار می کند.
ایجاد یک جدول مخاطبین مرتبط با مشتریان:
movie=# CREATE TABLE contacts
(contact_id int GENERATED ALWAYS AS IDENTITY,
customer_id int,
contact_name text not null,
mobile int,
email text,
PRIMARY KEY (contact_id),
CONSTRAINT fk_customer FOREIGN KEY(customer_id) REFERENCES customers(CUSTOMER_ID)
on DELETE CASCADE
);
CREATE TABLE
کلید خارجی (Customer_ID): هر مخاطب را به یک مشتری خاص از جدول مشتریان پیوند می دهد. این رابطه بین دو جدول برقرار می کند.
در Delete Cascade:اگر یک رکورد در جدول مشتریان حذف شود ، تمام سوابق مربوطه در جدول مخاطبین نیز به طور خودکار حذف می شوند.
درج سوابق تماس مرتبط با مشتریان:
movie=# insert into contacts(customer_id, contact_name, mobile, email) values (1,'Guru', 1234, 'guru@guru.com'), (2, 'Pritha', 2345, 'lakshmi@pritha.com');
INSERT 0 2
movie=# select * from customers;
customer_id | customer_name
-------------+---------------
1 | guru
2 | pritha
3 | pritha
4 | muthu
(4 rows)
movie=# select * from contacts;
contact_id | customer_id | contact_name | mobile | email
------------+-------------+--------------+--------+--------------------
1 | 1 | Guru | 1234 | guru@guru.com
2 | 2 | Pritha | 2345 | lakshmi@pritha.com
(2 rows)
یک رکورد مشتری و مخاطبین مرتبط را حذف کنید:
movie=# delete from customers where customer_id=1;
DELETE 1
movie=# select * from contacts;
contact_id | customer_id | contact_name | mobile | email
------------+-------------+--------------+--------+--------------------
2 | 2 | Pritha | 2345 | lakshmi@pritha.com
(1 row)
با شناسه دانشجویی که در حال افزایش خودکار است ، یک جدول دانش آموزان ایجاد کنید:
movie=# create table students_2
(student_id SERIAL primary key,
name varchar(20) not null,
class int);
CREATE TABLE
سریال: ستون student_id به عنوان یک نوع داده سریال تنظیم شده است که به طور خودکار با هر ردیف جدید افزایش می یابد. مانند یک ستون عدد صحیح به صورت خودکار رفتار می کند.
یک جدول دوره هایی با یک کلید خارجی برای دانشجویان ایجاد کنید:
movie=# create table courses
(course_id SERIAL primary key,
student_id int,
course_name text,
FOREIGN KEY (student_id) REFERENCES students_2(student_id) on DELETE CASCADE);
CREATE TABLE
چندین سوابق دانشجویی را در جدول دانش آموزان وارد کنید:
movie=# insert into students_2 values(101,'guru',4),(102,'pritha',5),(103,'kuhan',3);
INSERT 0 3
سوابق دوره های مختلف را در جدول دوره ها وارد کنید:
movie=# insert into courses(student_id, course_name) values(101, 'Karate'), (102,'Kung fu'), (103,'Yoga');
INSERT 0 3
سابقه دانشجویی را از جدول دانش آموزان حذف کنید:
movie=# delete from students_2 where student_id = 102;
DELETE 1
movie=# select * from courses;
course_id | student_id | course_name
-----------+------------+-------------
4 | 101 | Karate
6 | 103 | Yoga
(2 rows)
یک رکورد دوره را از جدول دوره ها حذف کنید:
movie=# delete from courses where course_id = 4;
DELETE 1
movie=# select * from courses;
course_id | student_id | course_name
-----------+------------+-------------
4 | 101 | Karate
6 | 103 | Yoga
(2 rows)
یک میز کارمند با جزئیات کارمند ایجاد کنید:
movie=# create table emp(empno numeric, empname text, joining_date date, dept_no numeric);
CREATE TABLE
پرونده کارمندان را در جدول کارمندان قرار دهید:
movie=# insert into emp values(101, 'Raja', '26-Feb-2025', 1);
INSERT 0 1
یک ستون حقوق و دستمزد را به جدول کارمند اضافه کنید:
movie=# alter table emp add salary int;
ALTER TABLE
movie=# select * from emp;
empno | empname | joining_date | dept_no | salary
-------+---------+--------------+---------+--------
101 | Raja | 2025-02-26 | 1 |
(1 row)
ستون شماره بخش را از جدول کارمند رها کنید:
movie=# alter table emp drop column dept_no;
ALTER TABLE
movie=# select * from emp;
empno | empname | joining_date | salary
-------+---------+--------------+--------
101 | Raja | 2025-02-26 |
(1 row)
تغییر نوع داده ستون برای نام کارمندان در جدول کارمندان:
movie=# alter table emp alter column empname TYPE varchar(30);
ALTER TABLE
movie=# select * from emp;
empno | empname | joining_date | salary
-------+---------+--------------+--------
101 | Raja | 2025-02-26 |
(1 row)
حقوق کارمندان را در جدول کارمندان به روز کنید:
movie=# update emp set salary = 25000 where empno = 101;
UPDATE 1
movie=# select * from emp;
empno | empname | joining_date | salary
-------+---------+--------------+--------
101 | Raja | 2025-02-26 | 25000
(1 row)
تمام سوابق را از جدول کارمند حذف کنید:
movie=# truncate table emp;
TRUNCATE TABLE
movie=# select * from emp;
empno | empname | joining_date | salary
-------+---------+--------------+--------
(0 rows)
جدول کارمند را از پایگاه داده رها کنید:
movie=# drop table emp;
DROP TABLE
movie=# select * from emp;
ERROR: relation "emp" does not exist
LINE 1: select * from emp;
^
مشاهده:
نمای در SQL یک جدول مجازی است که بر اساس نتیجه یک پرس و جو ساخته شده است. این شامل ردیف ها و ستون ها دقیقاً مانند یک جدول واقعی است ، اما داده ها را از نظر جسمی ذخیره نمی کند.
در عوض ، داده ها به صورت پویا هنگام دسترسی به نمای ، بر اساس پرس و جو که با آن تعریف شده است ، تولید می شوند.
movie=# create view emp_view as
select * from student_2;
CREATE VIEW
movie=# select * from student_2;
student_id | name | class
------------+------+--------
101 | abcd | 23132
102 | sds | 32443
103 | fff | 234334
(3 rows)
movie=# drop view emp_view;
DROP VIEW
movie=# select * from student_2;
student_id | name | class
------------+------+--------
101 | abcd | 23132
102 | sds | 32443
103 | fff | 234334
(3 rows)
توضیح دهید:
از بیانیه توضیح در SQL برای به دست آوردن اطلاعات در مورد نحوه اجرای موتور پایگاه داده استفاده می شود.
این یک تفکیک دقیق از برنامه اجرای ، از جمله نحوه دسترسی به جداول ، استفاده از فهرست ها ، و ترتیب عملیات انجام شده توسط برنامه ریز پرس و جو را ارائه می دهد.
movie=# explain select * from student_2;
QUERY PLAN
-------------------------------------------------------------
Seq Scan on student_2 (cost=0.00..18.60 rows=860 width=66)
(1 row)
movie=# explain select * from student_2 where name="abcd";
QUERY PLAN
-----------------------------------------------------------
Seq Scan on student_2 (cost=0.00..20.75 rows=4 width=66)
Filter: ((name)::text="abcd"::text)
(2 rows)
فهرست:
یک شاخص در SQL یک شیء پایگاه داده است که سرعت عملیات بازیابی داده ها را در یک جدول با هزینه فضای اضافی و سربار تعمیر و نگهداری بهبود می بخشد.
movie=# create index name on student_2(name);
CREATE INDEX
movie=# explain select * from student_2 where name="abcd";
QUERY PLAN
----------------------------------------------------------
Seq Scan on student_2 (cost=0.00..1.04 rows=1 width=66)
Filter: ((name)::text="abcd"::text)
(2 rows)
اگر وجود داشته باشد جدول EMP را رها کنید:
movie=# drop table if exists emp;
NOTICE: table "emp" does not exist, skipping
DROP TABLE
تغییر نام ستون در جدول student_2:
movie=# alter table student_2 rename column name to Student_name;
ALTER TABLE
movie=# select * from student_2;
student_id | student_name | class
------------+--------------+--------
101 | abcd | 23132
102 | sds | 32443
103 | fff | 234334
(3 rows)
در جدول student_2 یک محدودیت چک را در ستون کلاس اضافه کنید:
movie=# alter table student_2 add check(class in (23132,32443,234334));
ALTER TABLE
movie=# insert into student_2 values(104,'frferf',23132);
INSERT 0 1
movie=# insert into student_2 values(105,'rferf',3423132);
ERROR: new row for relation "student_2" violates check constraint "student_2_class_check"
DETAIL: Failing row contains (105, rferf, 3423132).
SQL:
SQL (زبان پرس و جو ساختاری) زبانی قدرتمند است که برای تعامل با پایگاه داده های رابطه ای استفاده می شود.
این امر را می توان بر اساس عملیات و کارهایی که انجام می دهند ، به انواع مختلف زبانها طبقه بندی کنید.
1. زبان تعریف داده (DDL)
DDL برای تعریف و مدیریت ساختار اشیاء پایگاه داده مانند جداول ، ایندکس و نماها استفاده می شود.
ایجاد: مورد استفاده برای ایجاد اشیاء پایگاه داده (جداول ، ایندکس ، نماها و غیره).
alter: برای اصلاح یک شیء پایگاه داده موجود (به عنوان مثال ، اضافه کردن ، حذف یا تغییر ستون ها) استفاده می شود.
افت: برای حذف یک شیء پایگاه داده (به عنوان مثال ، جدول ، مشاهده) استفاده می شود.
کوتاه کردن: تمام ردیف ها را از یک جدول بدون ورود به سیستم حذف ردیف جداگانه حذف می کند.
2. زبان دستکاری داده (DML)
DML برای دستکاری داده های ذخیره شده در پایگاه داده استفاده می شود. این شامل عملیاتی مانند درج ، به روزرسانی ، حذف و بازیابی داده ها است.
انتخاب کنید: برای بازیابی داده ها از یک یا چند جدول استفاده می شود.
درج: برای اضافه کردن ردیف های جدید به یک جدول استفاده می شود.
به روز رسانی: برای اصلاح داده های موجود در یک جدول استفاده می شود.
حذف: برای حذف ردیف ها از یک میز استفاده می شود.
3. زبان کنترل داده (DCL)
DCL برای کنترل دسترسی به داده ها در پایگاه داده استفاده می شود. این مجوزها را برای کاربران و نقش ها تعریف می کند.
کمک هزینه: برای اختصاص امتیاز به کاربران یا نقش ها استفاده می شود.
لغو: برای حذف امتیازات از کاربران یا نقش ها استفاده می شود.
4. زبان کنترل معامله (TCL)
TCL برای مدیریت معاملات در یک پایگاه داده ، که گروه هایی از عملیات DML هستند استفاده می شود. این یکپارچگی و قوام داده ها را تضمین می کند.
تعهد: تمام تغییرات ایجاد شده در معامله فعلی را ذخیره می کند.
بازگشت: تغییرات ایجاد شده در طول معامله فعلی را خنثی می کند.
SavePoint: نکته ای را در معامله ای تنظیم می کند که می توانید به آن برگردید.
تنظیم معامله: برای پیکربندی خصوصیات معامله استفاده می شود.
5. زبان پرس و جو داده (DQL)
DQL در درجه اول مربوط به پرس و جو و بازیابی داده ها از پایگاه داده است.
انتخاب کنید: برای بازیابی داده ها از یک یا چند جدول استفاده می شود (این دستور نیز بخشی از DML است اما عمدتاً تحت DQL قرار می گیرد زیرا برای داده های پرس و جو استفاده می شود).